Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Ulangi tabel menggunakan Cross apply dan UNION ALL hasilnya

Gunakan Cross Apply untuk membatalkan hasil. Kueri kueri dinamis harus dibuat dalam format ini.

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 harus seperti

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 

Catatan : Karena Anda membuat daftar nilai dari #labelTempTab tabel pastikan Anda memiliki semua label yang ada di #SetValuesTable tabel




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Untuk Nvarchar(Max) saya hanya mendapatkan 4000 karakter di TSQL?

  2. Bagaimana cara menggunakan batas di Microsoft SQL Server 2008?

  3. SQL Server Management Studio - Menambahkan/Memindahkan Kolom perlu dijatuhkan dan dibuat ulang?

  4. Menggunakan Alias ​​​​di Mana Klausul atau Opsi Alternatif?

  5. Apakah ada cara untuk menghasilkan skrip basis data dari kueri SQL di SQL Server?