Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在存储过程中将行创建为列_Sql Server_Stored Procedures - Fatal编程技术网

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您可以根据下面的内容进行尝试。这也是固定列,我有动态列。请检查整个答案。首先,他对静态列进行查询,然后对同一查询进行动态查询。