gpt4 book ai didi

sql-server - 使用 SQL Pivot 显示所有行,包括记录数为零的行

转载 作者:行者123 更新时间:2023-12-01 02:46:41 25 4
gpt4 key购买 nike

有没有一种方法可以使用 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 上执行某种“左外连接”来显示所有行来实现这一点?

最佳答案

您确实需要使用叉积和左连接来制造缺失的记录,以便它们出现

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

关于sql-server - 使用 SQL Pivot 显示所有行,包括记录数为零的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com