2014-02-14 26 views
0

我有一個SQL查詢作爲如何通過使用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 

現在我想第1列(personcount)使用組要總結第二和第三列 但不要」,這導致不想總結第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

NULL不與任何值相等。因此,以任何價值「崩潰」都沒有意義。 *但是,*如果您從羣組中刪除這些列並使用適當的*聚合*函數,那麼您應該達到您想要的結果。 MAX({NULL,5555}) - > 5555'。 – user2864740

+0

爲什麼你想要一個人爲0,但不是爲2或3? –

回答

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; 
+0

您應該認識到,雖然Gordon的解決方案會爲每個personCount值提供一行,但QPWaiting,NoOfCR和CRNo列中的結果值可能不全都來自原始表的同一行。 一個問題,您的問題是,你所要求的一個結果每個personCount價值,但你不解釋你想在最右邊的列中看到的,特別是如果他們對特定personCount原始行之間差異什麼樣的價值觀。 –