Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Durchlaufen Sie eine Tabelle mit Cross apply und UNION ALL die Ergebnisse

Verwenden Sie Cross Apply um das Ergebnis zu entpichten. Dynamische Abfragen sollten in diesem Format erstellt werden.

SELECT mnum,
       label,
       label_value,
       [Property Type]
FROM   #SetValuesTable
       CROSS apply(VALUES ('la1',la1),('la2',la2),('la3',la3),
                          ('sa1',sa1),('sa2',sa2),('sa3',sa3),
                          ('ha1',ha1),('ha2',ha2),('ha3',ha3),
                          ('ka1',ka1),('ka2',ka2)) cs (label, label_value) 

Dynamic query sollte so etwas wie

sein
DECLARE @label VARCHAR(max)='',
        @sql   NVARCHAR(max)

SELECT @label += '(' + '''' + label + ''',' + label + '),'
FROM   (SELECT DISTINCT Isnull(label, '') label
        FROM   #labelTempTab)a

SELECT @label = LEFT(@label, Len(@label) - 1)

SET @sql= 'SELECT mnum,
             label,
             label_value,
             [Property Type]
    FROM   #SetValuesTable
           CROSS apply(VALUES ' + @label
          + ') cs (label, label_value) '

EXEC Sp_executesql @sql 

Hinweis: Da Sie eine Werteliste aus #labelTempTab generieren vergewissern Sie sich, dass alle Labels in #SetValuesTable vorhanden sind Tabelle