我在 SQL Server 2012 上工作,但遇到一个问题:我不能将行表示为列。
我需要将详细信息表中的代码类型表示为列,其中包含详细信息表中的计数部分的值,通过 plid 在主节点和详细信息之间连接。每个 plid 都有一组代码类型,因此我不会将代码类型表示为行,而是将其表示为列。列将具有标题作为代码类型,内容列将是计数部分。
怎么做?
create table #master
(
zplid int,
zplidname nvarchar(50)
)
insert into #master(zplid,zplidname)
values
(4124,'tetanium'),
(4125,'FilmCapacitor'),
(4145,'CeramicCapacitor'),
(4170,'Holetransistor'),
(4190,'resistor')
create table #details
(
zplid int,
CodeType int,
CountParts int
)
insert into #details(zplid,CodeType,CountParts)
values
(4124,9089,9011),
(4124,7498,7000),
(4125,9089,2000),
(4125,7498,1000),
(4145,9089,3000),
(4145,7498,8500),
(4170,9089,7600),
(4170,7498,6600),
(4190,9089,9001),
(4190,7498,9003)
结果:
您需要
PIVOT
在 SQL Server 中使用运算符。(注意UNPIVOT
也非常有用)。这个StackOverflow 答案提供了一个非常好的演练如何使用
PIVOT
.你基本上想要这样的查询:
上面的示例输出以下结果(使用示例脚本构建 #Master 和 #Details 表):
下面是一个示例查询,其输出与上述相同,但使用动态 SQL 动态生成 CodeType 上的列: