gpt4 book ai didi

sql - 使用动态 SQL 语句进行数据透视

转载 作者:行者123 更新时间:2023-12-02 02:52:27 27 4
gpt4 key购买 nike

这是数据的一小部分样本。在实际数据中,Name和Code下的值都是几百个,而且这些值经常变化。因此,硬编码 Pivot 语句将不起作用。需要创建动态 SQL 语句 - 我需要这方面的帮助。

DECLARE @Test Table
(
Name Varchar(32),
Code Varchar(20)
)

INSERT INTO @Test(Name, Code) VALUES
('A-1', 'A-One')
, ('A 2', 'A-Two')
, ('B 1-b', 'B-One')
, ('B', 'A-Two')
, ('C', 'A-One')
, ('C', 'B-One')
, ('C', 'C-One')

示例数据集如下所示[同样,这只是一个小样本]:

Name    Code
A-1 A-One
A 1 A-Two
B 1-b B-One
B A-Two
C A-One
C B-One
C C-One

请注意,Code 值 [如 A-One、A-Two 和 B-One] 可能与多个 Name 值关联。

例如A-One 与姓名 A-1 以及姓名 C 一起出现......

我想输出它,使其看起来像这样 [除了,比我显示的值多得多 - 这些值可以改变]:

             A-1      A 1        B 1-b          B      C
A-One X X
A-Two X X
B-One X X
C-One X

“名称”值和代码值的数量可以更改。它们不是恒定的。

目标是能够向下查看左侧的代码值列表 - 并轻松查看代码与哪些名称值相关联。

我相信这需要创建动态 pivot sql 并且我在理解 Pivot sql 时遇到困难,我将不胜感激任何帮助或指示。

最佳答案

您可以使用动态枢轴:

create table dbo.test([Name] Varchar(32), Code Varchar(30)) 

insert into dbo.test values
('A-1', 'A-One')
, ('A 2', 'A-Two')
, ('B 1-b', 'B-One')
, ('B', 'A-Two')
, ('C', 'A-One')
, ('C', 'B-One')
, ('C', 'C-One')

declare @cols nvarchar(max)='' --holds all the values that will become column names
declare @alias nvarchar(max)='' --holds values that will become column names and converts values to 'x'
declare @sql nvarchar(max)='' --contains the TSQL dinamically generated

select @cols = @cols + ', [' + [Name] + ']'
from dbo.test
group by [Name]

select @alias = @alias + ', case when T.[' + [Name] + '] is not null then ''x'' else '''' end as [' + [Name] + ']'
from dbo.test
group by [Name]

set @cols = RIGHT(@cols, len(@cols)-2)
set @sql = @sql + ' select T.Code ' + @alias + ' from ('
set @sql = @sql + ' select piv.[Code], ' + @cols
set @sql = @sql + ' from dbo.test '
set @sql = @sql + ' pivot (max([Name]) for [Name] in ('+@cols+') ) piv '
set @sql = @sql + ' ) T'

--execute dynamic query
exec(@sql)

结果:

enter image description here

关于sql - 使用动态 SQL 语句进行数据透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51521898/

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