Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用具有空值的group by_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 如何使用具有空值的group by

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

我有一个SQL查询,结果是

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;