2017-05-26 4 views
1

J'ai 2 tables:Joignez-vous à exécuter la requête à la table

 table 1

et

table 2.

Puis j'ai ce code qui crée la table dynamique de la 1ère table et la joint avec la 2ème table.

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) 

et je dois stocker en quelque sorte la requête exécutée afin que je puisse le rejoindre avec tab3 par ZamestnanecId.It contient ces colonnes: jméno, Příjmení, ZaměstnanecId. (je ne peux pas poster d'image à cause de la limite d'image)

Des idées comment le faire? Il serait préférable d'utiliser requête exécutée comme « de » paramètre de sélection, mais il ne faut pas

Répondre

0

Vous ne pouvez pas stocker les résultats, mais peut au lieu de continuer à utiliser requête dynamique comme ci-dessous

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)