将执行查询加入表

时间:2017-05-26 18:59:02

标签: sql-server dynamic pivot procedure execute

我有两张桌子:

 table 1

table 2

然后我有这个代码从第一个表创建动态数据透视表并将其与第二个表连接。

DECLARE @cols AS NVARCHAR( MAX ),                                      
        @query AS NVARCHAR( MAX )                                         
        SET @cols = STUFF( ( SELECT ', ' + QUOTENAME( Nazev )
                    FROM Tab1
                    FOR XML PATH( '' ),
                    TYPE
                  ).value( '.', 'NVARCHAR( MAX )' ),
                  1,
                  1,
                  ''
                )                                                         
    SET @query = 'SELECT ZamestnanecID,' + @cols +
         'FROM ( SELECT ZamestnanecID,
                        Tab1.Nazev AS Nazev2,
                        tab2.[castka]
                 FROM Tab1
                 JOIN Tab2 On Tab2.typ = Tab1.Id
               ) AS prePivot
          PIVOT
          (
              SUM( castka )
              FOR Nazev2 IN (' + @cols + ')
          ) p'                                                
         execute(@query)

我需要以某种方式存储已执行的查询,以便我可以通过ZamestnanecId将它与tab3连接。它包含以下列:Jméno,Příjmení,ZaměstnanecId。 (由于图像限制,我无法发布图片)

任何想法怎么做? 最好将执行的查询用作select中的“from”参数,但这不是必需的

1 个答案:

答案 0 :(得分:0)

您无法存储结果,但可以继续使用动态查询,如下所示

DECLARE 
    @cols AS NVARCHAR( MAX ),                                      
    @query AS NVARCHAR( MAX )                                         
SET @cols = STUFF( ( SELECT ', ' + QUOTENAME( Nazev )
                FROM Tab1
                FOR XML PATH( '' ),
                TYPE
              ).value( '.', 'NVARCHAR( MAX )' ),
              1,
              1,
              ''
            )                                                         
SET @query = 'SELECT * FROM tab3 t3 JOIN '+
     '( SELECT ZamestnanecID,' + @cols +
     ' FROM ( SELECT ZamestnanecID,
                    Tab1.Nazev AS Nazev2,
                    tab2.[castka]
             FROM Tab1
             JOIN Tab2 On Tab2.typ = Tab1.Id
           ) AS prePivot
      PIVOT
      (
          SUM( castka )
          FOR Nazev2 IN (' + @cols + ')
      ) p ) t '+
      ' on t.ZamestnanecId=t3.ZamestnanecId'
     execute(@query)