2016-04-21 5 views
0

Если нет подходящей строки для статуса 1, но я все же хочу показать название категории и общее число как 0. Как мне изменить приведенный ниже SQL? Спасибо!Как показать общее название категории и общее число

SELECT 
    CASE WHEN STATUS=1 THEN 'CATEGORY A' else 'CATEGORY B' end as [Category Name], 
    COUNT(*) as [Total Number in Each Category] 
FROM TABLE 
WHERE STATUS IN (1,2) 
+0

Вы можете использовать [стержень] (HTTP : //stackoverflow.com/questions/10428993/understanding-pivot-function-in-t-sql) с жестко закодированными категориями и количеством совпадающих строк для каждого из них. – CactusCake

+0

Есть ли другой способ? Спасибо – Ice

+0

Единственный другой способ, который я предложил бы, - создать таблицу (или временную таблицу) со всеми возможными категориями, а затем лечь, присоединяя ваши данные к ней и используя 'ifnull (count (join_table. *), 0)', чтобы показать вашу агрегированные результаты для каждой категории. Это часто показывает, как люди отображают результаты по месяцам, когда в течение нескольких месяцев могут быть нулевые записи соответствия. См. [Этот вопрос] (например, http://stackoverflow.com/questions/21789777/counting-records-by-year-and-month-including-zero-counts). – CactusCake

ответ

1

Союз в пустые значения с исходным запросом в КТР (или временную таблицу, если вы предпочитаете), то запрос на сумму от КТР:

with cte as (SELECT case WHEN STATUS=1 THEN 'CATEGORY A' else 'CATEGORY B' end as [Category Name] 
        ,COUNT(*) as [Total Number in Each Category] 
      FROM TABLE 
      WHERE STATUS IN (1,2) 
      UNION ALL 
      select 'CATEGORY A' as [Category Name] 
        ,0 as [Total Number in Each Category] 
      UNION ALL 
      select 'CATEGORY B' as [Category Name] 
        ,0 as [Total Number in Each Category]) 

select [Category Name] 
     , sum([Total Number in Each Category]) as [Total Number in Each Category] 
from CTE 
group by [Category Name] 
+0

И я мог бы пояснить, что если бы вы меняли категории или многие категории, вы могли бы объединить выделенную категорию, 0 как общую, а не жесткую кодировку списка. –

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