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 SELECTed, so it can't appear in your HAVING clause.
If you meant to only SUM the Bills 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.