2011-11-22 29 views
2

有没有使用Pivot包含没有记录的行并显示0或结果为空的行的方法?显示SQL Pivot的所有行,包括那些记录计数为零的行

我想查询的reults看起来是这样的: -

 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 

然而,目前枢轴没有返回空行和我的结果是这样的: -

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

任何这种方式可以通过在Pivot上进行某种“左外连接”来显示所有行来实现?

+2

请出示你的源数据和当前'pivot'语句看起来象。 –

回答

2

你真的需要使用跨产品制造缺失的记录,以便左连接,使他们出现

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 
相关问题