sql >> Database >  >> RDS >> Sqlserver

Loop door een tabel met Cross apply en UNION ALLE resultaten

Gebruik Cross Apply om het resultaat ongedaan te maken. Dynamische queryquery moet in dit formaat worden geconstrueerd.

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 zou zoiets moeten zijn als

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 

Opmerking: Aangezien u een waardenlijst genereert van #labelTempTab tabel zorg ervoor dat alle labels aanwezig zijn in #SetValuesTable tafel




  1. Toepassing versus database-ingezeten verbindingspool

  2. Partities en High Water Mark in Oracle

  3. MySQL set unique_checks, set foreign_key_checks vs. verander tabel uitschakelen sleutels

  4. Hoe de waarde van alle xml-attributen in een xml-variabele bij te werken met t-sql?