这是数据的一小部分。在实际数据中,“名称”和“代码”下的值有数百个,并且这些值经常更改。
因此,对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

请注意,代码值(如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

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

目的是能够在左侧查看“代码”值的列表-并轻松查看与“代码”关联的“名称”值。

我相信这需要创建动态数据透 View sql,并且我在理解数据透 View 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)

结果:

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

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

10-16 23:47
查看更多