2015-04-09 3 views
1

Мне нужно совместить подсчет значений, где он соответствует «животному типу» в моем примере кода ниже. К сожалению, у меня могут отсутствовать записи в col2 ('a', 'b'), но мне нужно подсчитать тип животного, где они находятся в 'a', 'b' или null. Мне нужно повернуть NULL в другой столбец с этим значением счета. Я делаю сумму по всем поворотным столбцам в конце моего запроса, а те, у которых значения null в col2 не совпадают с итогами.Показать значение NULL как развернутый столбец в SQL Server

declare @testData table ( col1 varchar(10) 
          , col2 varchar(10) 
          ) 

insert into @testData 
values ('dog','a') 
insert into @testData 
values ('cat','b') 
insert into @testData 
values ('rabbit',null) 

select * from @testData 

select 
    pvt.col1  as [Animal Type] 
, pvt.a   as [A] 
, pvt.b   as [B] 
, total.records as [Total Count] 
from (
      select 
       col1 
      , col2 
      , count(*) as records 
      from @testData 
      group by 
       col1 
      , col2 
     ) as s 
pivot 
     (
      sum(records) 
      for  col2 in ([a], [b]) 
     ) as pvt 
join (
      select 
       col1  
      , count(*) as Records 
      from @testData 
      group by 
       col1 
     ) as total    on pvt.col1 = total.col1 

ответ

2

Изменить col2 в вашем подзапрос с IsNull функции, как показано ниже:

select 
    pvt.col1  as [Animal Type] 
, pvt.a   as [A] 
, pvt.b   as [B] 
, pvt.[NULL]  as [NULL] 
, total.records as [Total Count] 
from (
      select 
       col1 
      , ISNULL(col2,'NULL') col2 
      , count(*) as records 
      from @testData 
      group by 
       col1 
      , col2 
     ) as s 
pivot 
     (
      sum(records) 
      for  col2 in ([a], [b], [NULL]) 
     ) as pvt 
join (
      select 
       col1  
      , count(*) as Records 
      from @testData 
      group by 
       col1 
     ) as total    on pvt.col1 = total.col1 
+0

Спасибо. Это потрясающе. – lnsmith

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