SQL Не возвращать столбец, если значение равно нулю - PullRequest
4 голосов
/ 13 июля 2011

Этот запрос возвращает одну строку со столбцами Ready, Processing, Complete, Failed и Error с итогами для каждого. Есть ли способ переписать этот запрос, чтобы столбцы с нулевым итогом не возвращались?

Я использую это для заполнения элемента управления mschart, и я не хочу добавлять метки на график, если есть 0 экземпляров этой категории.

SELECT        
              SUM(CASE WHEN Status = 'R' THEN 1 ELSE 0 END) AS Ready,
              SUM(CASE WHEN Status = 'P' THEN 1 ELSE 0 END) AS Processing, 
              SUM(CASE WHEN Status = 'C' THEN 1 ELSE 0 END) AS Complete,
              SUM(CASE WHEN Status = 'F' THEN 1 ELSE 0 END) AS Failed,
              SUM(CASE WHEN Status = 'E' THEN 1 ELSE 0 END) AS Error
FROM  MailDefinition 

Ответы [ 2 ]

5 голосов
/ 13 июля 2011

Нет, потому что форма запроса (поля, которые он содержит) должна быть известна. Только данные могут измениться, и это то, что вы должны искать. Вы можете динамически удалять или скрывать метки на основе данных 0 или null в столбце.

1 голос
/ 14 июля 2011

Что бы я сделал, это взять то, что у вас есть, выбросить его в непивот, а затем удалить все 0 записей.

select
    Type, 
    Sum
from
(
    SELECT                       
        SUM(CASE WHEN Status = 'R' THEN 1 ELSE 0 END) AS Ready,               
        SUM(CASE WHEN Status = 'P' THEN 1 ELSE 0 END) AS Processing,                
        SUM(CASE WHEN Status = 'C' THEN 1 ELSE 0 END) AS Complete,               
        SUM(CASE WHEN Status = 'F' THEN 1 ELSE 0 END) AS Failed,               
        SUM(CASE WHEN Status = 'E' THEN 1 ELSE 0 END) AS Error 
FROM  MailDefinition 
) a
unpivot
(
     Sum for Type in ([Ready],[Processing],[Complete],[Failed],[Error])
) u
where Sum>0

Это, конечно, влечет за собой некоторое изменение графика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...