select SUM (Bill) from ProductSaleReport group by PCI
having MONTH(Date) between 1 and 3
Could any one please help me finding the issue.?
<Use WHERE
to filter before group by
HAVING
is used to filter data after the group by occurs
select SUM (Bill) -- comment: you need to add the PCI column since you use it in the group by right?
from ProductSaleReport
WHERE MONTH(Date) between 1 and 3
group by PCI
MONTH(Date) is not a column you're grouped by, so it can't appear in having clause. You can do like that:
select SUM (Bill)
from ProductSaleReport
where MONTH(Date) between 1 and 3
group by PCI
Other way is
select SUM (Bill)
from ProductSaleReport
group by PCI, MONTH(Date)
having MONTH(Date) between 1 and 3
but keep in mind that you will get result grouped by month as well as by PCI.
The difference between WHERE and HAVING explained here: Using 'case expression column' in where clause
MONTH(Date)
is not a column you SELECT
ed, so it can't appear in your HAVING
clause.
If you meant to only SUM
the Bill
s from rows where the month is between 1 and 3, then that is a WHERE
clause, not a HAVING
clause.
If all the rows in each PCI
group have the same MONTH(Date)
, then you can add MONTH(Date)
to your SELECT
clause in order to use it in the HAVING
clause.