我在对2列进行分组时有问题,请继续获得错误:
列'#TEM1.STATUS‘在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
下面是我的存储过程代码:
SELECT COUNT(Employee_ID),Roster_Code,STATUS
FROM #TEM1 GROUP BY Roster_Code,DepartmentTEM1表实际上是一个临时表,我想按部门和名册代码对它们进行分组。下面是我的TEM1数据:

我的预期产出:

发布于 2016-10-17 05:25:14
指定"GROUP Roster_Code,Department“基本上意味着您希望看到表中存在的Roster_Code和Department的每个不同组合的输出中都有一行。
例如,输出将包含Roster_Code=A、Department=HRS的一行。但是这个组中有一些行是STATUS=IN的,另一些行是STATUS=ABSENT的。因此,在这种情况下,不清楚希望在输出中显示什么,因此会看到一条错误消息。
这就是为什么您不能简单地选择“STATUS”--您需要将它包含在GROUP子句中(因此对于每个状态,您将在输出中有不同的行),或者使用一些聚合函数,它告诉SQL Server如何将多个值组合成一个它可以输出的值。
看起来你实际上要做的是计算出拥有“IN”状态的员工的数量,以及员工的总数。这可能意味着您需要使用COUNT()聚合函数。
下面是实现所需输出的一步:
SELECT Department,
Roster_Code,
COUNT(CASE WHEN STATUS='IN' THEN 1 ELSE NULL END) IN_STATUSES,
COUNT(*) TOTAL_STATUSES
FROM #TEM1 GROUP BY Department, Roster_Code看起来,您还希望将除A/B/D/E之外的任何花名册代码归类为“other”,因此我们可以增加另一步:
SELECT Department,
Roster_Code,
COUNT(CASE WHEN STATUS='IN' THEN 1 ELSE NULL END) IN_STATUSES,
COUNT(*) TOTAL_STATUSES
FROM
(
SELECT Department,
CASE WHEN Roster_Code IN ('A','B','D','E') THEN Roster_Code ELSE 'Other' END Roster_Code,
STATUS
FROM #TEM1
) x
GROUP BY Department, Roster_Code看起来,您还希望执行“枢轴”操作,它将使用我们目前为A/B/D/E/Other拥有的独立行,并将这些行转换为单独一行中的列。然后,您将需要将当前的状态计数组合成"3/4“形式的字符串--这只是连接它们的一种情况(例如,IN_STATUSES + '/‘+ TOTAL_STATUSES)。
https://stackoverflow.com/questions/40078633
复制相似问题