Sql 如何使用具有空值的group by
我有一个SQL查询,结果是Sql 如何使用具有空值的group by,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个SQL查询,结果是 personCount toatlMinute Meal QPWaiting NoOfCR CRNo 0 2 NULL NULL NULL NULL 1 7 NULL NULL NULL NULL 2 8 NULL NULL
personCount toatlMinute Meal QPWaiting NoOfCR CRNo
0 2 NULL NULL NULL NULL
1 7 NULL NULL NULL NULL
2 8 NULL NULL NULL NULL
3 16 NULL NULL NULL NULL
4 128 NULL NULL NULL NULL
0 NULL NULL 14 2 5555, 6666
3 NULL NULL NULL NULL NULL
4 NULL NULL NULL NULL NULL
2 NULL NULL 14 2 5555, 6666
3 NULL NULL 14 2 5555, 6666
4 NULL NULL 14 2 5555, 6666
0 NULL 2 NULL NULL NULL
现在我想使用group by第一列(personcount
),并对第二列和第三列求和
但不想求第四、第五和第六列的和。但输出应显示所有数据在一个唯一的人计数
SELECT
personCount,
SUM(toatlMinute) toatlMinute,
SUM(Meal) Meal,
QPWaiting,
NoOfNCR AS NoOfCR,
NCRNo AS CRNo
FROM
@OperatorData
GROUP BY
personCount, QPWaiting, NoOfNCR, NCRNo
它的输出为
personCount toatlMinute Meal QPWaiting NoOfCR CRNo
0 2 2 NULL NULL NULL
0 NULL NULL 14 2 5555, 6666
1 7 NULL NULL NULL NULL
2 8 NULL NULL NULL NULL
2 NULL NULL 14 2 5555, 6666
3 16 NULL NULL NULL NULL
3 NULL NULL 14 2 5555, 6666
4 128 NULL NULL NULL NULL
4 NULL NULL 14 2 5555, 6666
A您可以看到,0人计数有两行。但是我只想要一排
如何获得此输出?如果要从最后三列中获取值,请告知,这样
NULL
值将消失,然后使用max()
或min()
:
NULL不等于任何值。因此,用任何值“崩溃”是没有意义的。但是,如果您从group by中删除这些列,并使用适当的聚合函数,则应该可以获得所需的结果。。e、 g.
MAX({NULL,5555})->5555
。为什么要为个人0设置一行,而不是为2或3设置一行?您应该意识到,虽然Gordon的解决方案会为每个personCount值设置一行,但QPWaiting、NoOfCR和CRNo列中的结果值可能并不都来自原始表的同一行。您的问题的一个问题是,您要求每个personCount值都有一个结果,但您没有解释您希望在最右边的列中看到哪些值,特别是如果它们在特定personCount的原始行中不同。
SELECT personCount, SUM(toatlMinute) as toatlMinute, SUM(Meal) as Meal,
max(QPWaiting) as QPWaiting, max(NoOfNCR) AS NoOfCR, max(NCRNo) AS CRNo
FROM @OperatorData
GROUP BY personCount;