Sql server 在存储过程中将行创建为列
我有以下三个表,我想使用存储过程作为最后一个表。有人能告诉我怎样才能加入他们吗 光盘:Sql server 在存储过程中将行创建为列,sql-server,stored-procedures,Sql Server,Stored Procedures,我有以下三个表,我想使用存储过程作为最后一个表。有人能告诉我怎样才能加入他们吗 光盘: DiscId DiscName 1 a 2 b 3 c DiscDetailId DiscId DiscDetailName Percentage 1 1 p 5 2 1 q 10 3 2
DiscId DiscName
1 a
2 b
3 c
DiscDetailId DiscId DiscDetailName Percentage
1 1 p 5
2 1 q 10
3 2 r 12
4 2 s 11
5 2 t 13
6 3 u 19
7 3 v 20
PurId DiscId
1 1
2 2
3 1
4 1
磁盘详细信息:
DiscId DiscName
1 a
2 b
3 c
DiscDetailId DiscId DiscDetailName Percentage
1 1 p 5
2 1 q 10
3 2 r 12
4 2 s 11
5 2 t 13
6 3 u 19
7 3 v 20
PurId DiscId
1 1
2 2
3 1
4 1
Pur:
DiscId DiscName
1 a
2 b
3 c
DiscDetailId DiscId DiscDetailName Percentage
1 1 p 5
2 1 q 10
3 2 r 12
4 2 s 11
5 2 t 13
6 3 u 19
7 3 v 20
PurId DiscId
1 1
2 2
3 1
4 1
我想显示如下数据:
PurId p q r s t
1 5 10
2 12 11 13
3 5 10
4 5 10
尝试上述查询。使用动态数据透视:
首先声明所有列:
DECLARE @Columns AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @Columns = STUFF((SELECT distinct ',' + QUOTENAME(c.DiscDetailName )
FROM DiscDetail c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
创建动态轴:
set @query = 'SELECT PurId, ' + @Columns + ' from
(
select Pur.PurId
, DiscDetail.Percentage
, DiscDetail.DiscDetailName
from Pur
inner join Disc on Pur.DiscID = Disc.DiscId
inner join DiscDetail on DiscDetail.ID = Disc.DiscId
) x
pivot
(
max(Percentage)
for DiscDetailName in (' + @Columns + ')
) p '
execute(@query)
有DiscDetail的动态数据,我无法使用p、q、r的用例。@user3405179您可以根据下面的内容进行尝试。这也是固定列,我有动态列。请检查整个答案。首先,他对静态列进行查询,然后对同一查询进行动态查询。