gpt4 book ai didi

sql - 使用 Pivot 转换 SQL 表的形状

转载 作者:行者123 更新时间:2023-12-04 18:18:54 26 4
gpt4 key购买 nike

我有一些数据以下列格式存储在表中

BatchID              EntityChanged             ChangeValue

EERS ABC DEF
EERS ABCD XYZ
EERS Something SomeValue
New Batch SomethingMore GHI

可以出现在“EntityChanged”列中的值列表是有限的,事先已知并且其中没有空格等。为了争论,让我们说这个列表是 - ABC,ABCD,Something,SomethingMore

然后对于上面的数据集,我想要一个输出
BatchID            ABC              ABCD            Something       SomethingMore
EERS DEF XYZ SomeValue NULL
New Batch NULL NULL NULL GHI

使用 Pivot 我只能走这么远。

有人可以帮我以所需的方式分割这些数据吗?

最佳答案

您可以为此使用 PIVOT,通过静态 PIVOT 或动态 PIVOT,如果您有未知数量的列,这可能会很好。

静态(见 SQL Fiddle with Demo):

create table t2
(
batchid varchar(10),
entitychanged varchar(20),
changevalue varchar(10)
)

insert into t2 values ('EERS', 'ABC', 'DEF')
insert into t2 values ('EERS', 'ABCD', 'XYZ')
insert into t2 values ('EERS', 'Something', 'SomeValue')
insert into t2 values ('New Batch', 'SomethingMore', 'GHI')

select *
from
(
select batchid, entitychanged, changevalue
from t2
) x
pivot
(
min(changevalue)
for entitychanged in ([ABC], [ABCD], [Something], [SomethingMore])
) p

动态(见 SQL Fiddle with Demo):
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(entitychanged)
from t2
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT batchid, ' + @cols + ' from
(
select batchid, entitychanged, changevalue
FROM t2
) x
pivot
(
min(changevalue)
for entitychanged in (' + @cols + ')
) p '

execute(@query)

两者都会给你相同的结果。

关于sql - 使用 Pivot 转换 SQL 表的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121775/

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