Отображение всех строк с SQL Pivot, включая строки с нулевым числом записей - PullRequest
3 голосов
/ 22 ноября 2011

Есть ли способ использовать Pivot для включения строк, для которых нет записей, и показывать 0 или нули для результатов?

Я хочу, чтобы результаты запроса выглядели примерно так: -

     A    B   C    D
5   12   81   107  0
4   0     0    0   0 
3   1    12   12   5 
2   3    0     0   0 
1   0    0     0   0

Однако в настоящее время Pivot не возвращает пустые строки, и мои результаты выглядят так: -

     A    B   C    D
5   12   81   107  0
3   1    12   12   5 
2   3    0     0   0 

Каким образом это можно сделать, выполнив своего рода «левое внешнее соединение» в Pivot, чтобы показать все строки?

1 Ответ

2 голосов
/ 23 ноября 2011

Вам действительно нужно изготовить недостающие записи, используя перекрестное произведение и левое соединение, чтобы они появились

declare @table table
(
      n     int not null,
      ch    char(1) not null,
      cnt   int not null,     

      primary key (n, ch)
)

insert into @table values (5, 'A', 12)
insert into @table values (5, 'B', 81)
insert into @table values (5, 'C', 107)
insert into @table values (3, 'A', 1)
insert into @table values (3, 'B', 12)
insert into @table values (3, 'C', 12)
insert into @table values (3, 'D', 5)
insert into @table values (2, 'A', 3)

declare @numbers table (n int not null primary key)
insert into @numbers values (1)
insert into @numbers values (2)
insert into @numbers values (3)
insert into @numbers values (4)
insert into @numbers values (5)

declare @chars table (ch char(1) not null primary key)
insert into @chars values ('A')
insert into @chars values ('B')
insert into @chars values ('C')
insert into @chars values ('D')


select n, [A], [B], [C], [D]
  from 
  ( -- manufacture missing records 
    select n.n, ch.ch, coalesce(t.cnt, 0) as cnt
      from @numbers n
        cross join @chars ch 
        left join @table t on (n.n = t.n and ch.ch = t.ch)
  ) as t
pivot
(
  sum(cnt)
  for ch in ([A], [B], [C], [D])
) as pivotTable
order by n desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...