Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przejrzyj tabelę w pętli, używając funkcji Cross Apply i UNION ALL the results

Użyj Cross Apply aby odwrócić wynik. Zapytanie dynamiczne powinno być skonstruowane w tym formacie.

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 powinno być jak

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 

Uwaga: Ponieważ generujesz listę wartości z #labelTempTab upewnij się, że masz wszystkie etykiety obecne w #SetValuesTable tabela




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić kolor paska stanu w SSMS dla różnych instancji SQL Server — samouczek SQL Server / TSQL, część 6

  2. Jakie uprawnienia są wymagane do zbiorczego wstawiania do programu SQL Server z udziału sieciowego z uwierzytelnianiem systemu Windows?

  3. Jeśli nie istnieje, nie działa w SQL CE

  4. Kolejność wykonania zapytania SQL

  5. Błąd przetwarzania modułu SSAS dotyczący wiązania kolumny