SQL Server 2012的查询 - 集团通过

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子句中。

+2

'SELECT *'扩展为'SELECT Col1,Col2,...'表中所有可用的列。错误消息告诉你,如果你使用GROUP BY FK_psPatRegisters,你不能在查询的SELECT部分​​包含任何其他列,除非它们被封装在一个[聚合函数]中(http://msdn.microsoft .COM/EN-US /库/ ms173454.aspx) – Dan 2014-09-05 03:51:51

拥有一群靠,你需要选择列和聚合函数,像这样:

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 

实质上,问题是单个单元格不能包含多个值。因此,要仅按一列进行分组并选择其他列,则需要指定如何处理这些多个值。