SQL Server 2012 查询 - 按 [重复] 分组
Posted
技术标签:
【中文标题】SQL Server 2012 查询 - 按 [重复] 分组【英文标题】:SQL Server 2012 Query - Group by [duplicate] 【发布时间】:2014-10-29 23:06:33 【问题描述】:我有这个脚本
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 *
扩展为 SELECT Col1, Col2, ...
。错误消息告诉您,如果您 GROUP BY FK_psPatRegisters
您不能在查询的 SELECT
部分中包含任何其他列,除非它们被包裹在 aggregate function
【参考方案1】:
要进行分组,您需要一个选择列和一个聚合函数,如下所示:
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 分组
【讨论】:
【参考方案2】:您只能在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
本质上,问题在于单个单元格不能包含多个值。因此,要仅按一列分组并选择其他列,您需要指定如何处理这些多个值。
【讨论】:
以上是关于SQL Server 2012 查询 - 按 [重复] 分组的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 2012 和 SQL Server Management Studio 2012 运行 SQL Server CE 4 查询