2014-02-14 2 views
0

У меня есть запрос 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-й столбец , но Дон» t хочу суммировать 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 не равен с любым значением. Таким образом, нет смысла «рушиться» с любым значением. * Однако *, если вы удалите эти столбцы из группы и используйте соответствующую функцию * aggregate *, тогда вы должны достичь желаемых результатов. '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. –

Смежные вопросы