SQL Server 2012的查询 - 集团通过
问题描述:
我有此脚本SQL Server 2012的查询 - 集团通过
select *
from psPatDiscounts
where cancelflag = '0'
and refdate between '2014-01-01 14:03:00'
and '2014-01-31 14:03:00'
group by FK_psPatRegisters
然而,运行此脚本后,它给了我此错误消息:
消息8120,级别16,状态1,行1
列'psPatDiscounts.PK_TRXNO'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
答
拥有一群靠,你需要选择列和聚合函数,像这样:
select psPatRegisters.ID, Count(*)
from psPatDiscounts
where cancelflag = '0'
and refdate between '2014-01-01 14:03:00'
and '2014-01-31 14:03:00' group by psPatRegisters.ID
在这种情况下COUNT(*)是聚合函数,它是由ID分组
答
只能在GROUP BY
或集合函数中包含所引用的选定列,如错误所示。
您需要在您的GROUP BY
中包含更多列,或将您的SELECT *
减少为SELECT FK_psPatRegisters
。
SELECT FK_psPatRegisters
FROM psPatDiscounts
WHERE cancelflag = '0' AND refdate BETWEEN '2014-01-01 14:03:00' AND '2014-01-31 14:03:00'
GROUP BY FK_psPatRegisters
实质上,问题是单个单元格不能包含多个值。因此,要仅按一列进行分组并选择其他列,则需要指定如何处理这些多个值。
'SELECT *'扩展为'SELECT Col1,Col2,...'表中所有可用的列。错误消息告诉你,如果你使用GROUP BY FK_psPatRegisters,你不能在查询的SELECT部分包含任何其他列,除非它们被封装在一个[聚合函数]中(http://msdn.microsoft .COM/EN-US /库/ ms173454.aspx) – Dan 2014-09-05 03:51:51