select SUM (Bill) from ProductSaleReport group by PCI
having MONTH(Date) between 1 and 3
请问任何人 帮我找到问题。
我收到了错误:
Msg 8121,Level 16,State 1,Line 1
列'ProductSaleReport.Date'在HAVING子句中无效 因为它不包含在聚合函数或 GROUP BY条款。
Msg 8121,Level 16,State 1,Line 1
列'ProductSaleReport.Date'在HAVING子句中无效 因为它不包含在聚合函数或 GROUP BY子句。
答案 0 :(得分:11)
MONTH(日期)不是您按其分组的列,因此它不会出现在having子句中。 你可以这样做:
select SUM (Bill)
from ProductSaleReport
where MONTH(Date) between 1 and 3
group by PCI
其他方式是
select SUM (Bill)
from ProductSaleReport
group by PCI, MONTH(Date)
having MONTH(Date) between 1 and 3
但请记住,您将按月和PCI分组结果。
这里解释了WHERE和HAVING之间的区别:Using 'case expression column' in where clause
答案 1 :(得分:7)
使用WHERE
在分组前过滤
HAVING
用于在发生分组后过滤数据
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
答案 2 :(得分:2)
MONTH(Date)
不是您SELECT
编辑的列,因此它不会出现在您的HAVING
子句中。
如果您只想从月份在1到3之间的行中SUM
Bill
,那么这是WHERE
子句,而不是HAVING
子句
如果每个PCI
组中的所有行都具有相同的MONTH(Date)
,那么您可以将MONTH(Date)
添加到SELECT
子句中,以便在{HAVING
中使用它1}}子句。
答案 3 :(得分:0)
试试这个,
选择 SUM(账单) 来自产品销售报告 按 PCI 分组 有 MIN(MONTH(Date))>=1 和 MAX(MONTH(Date))<=3