如何使用具有空值的group by

时间:2014-02-14 21:36:26

标签: 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            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

现在我想使用第1列的组(personcount)并想要将第2列和第3列相加 但不想总结第4,第5和第6列。但是输出应该将所有数据显示在一个中以用于唯一的人数。

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

你可以看到有0行人数有两行。但是我只想要一行。

如何获得此输出?请建议

1 个答案:

答案 0 :(得分:1)

如果您想从最后三列获取值,那么NULL值会消失,然后使用max()min()

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;