Menukar Baris ke Lajur dalam DB2 Menggunakan Dynamic SQL
Objektifnya adalah untuk memutar data dalam jadual, menukar baris kepada lajur, untuk mendapatkan keluaran yang dikehendaki. Pertimbangkan struktur jadual berikut:
Jadual Sumber
ItemID | Item | Value |
---|---|---|
1 | Meeting | Now |
1 | Advise | Yes |
1 | NoAdvise | No |
2 | Meeting | Never |
2 | Advise | No |
2 | NoAdvise | Null |
2 | Combine | Yes |
Output yang Diingini
ItemID | Meeting | Advise | NoAdvise |
---|---|---|---|
1 | Now | Yes | No |
2 | Never | No | Null |
SQL Pertanyaan Menggunakan Subkueri Berkaitan
Satu pendekatan untuk mencapai transformasi ini adalah dengan menggunakan subkueri berkorelasi:
SELECT A.ItemID, MAX(CASE WHEN A.Item = 'Meeting' THEN Value END) AS Meeting, MAX(CASE WHEN A.Item = 'Advise' THEN Value END) AS Advise, MAX(CASE WHEN A.Item = 'NoAdvise' THEN Value END) AS NoAdvise FROM A GROUP BY A.ItemID
Pertanyaan ini melaksanakan berbilang subkueri berkorelasi, satu untuk setiap lajur output yang diingini, untuk mengekstrak nilai yang sepadan bagi setiap baris. Hasilnya kemudian dikumpulkan mengikut lajur ItemID untuk mendapatkan output terpivot.
Pendekatan Alternatif Menggunakan SQL Dinamik
Pilihan lain ialah memanfaatkan SQL dinamik untuk membina jadual pangsi . Pendekatan ini membolehkan lebih fleksibiliti dan boleh disesuaikan untuk menjana lajur output yang diingini:
DECLARE @cols AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX) SET @cols = '' SELECT @cols += ',MAX(CASE WHEN Item = ''' + Item + ''' THEN Value END) AS ' + Item FROM ( SELECT DISTINCT Item FROM A ) AS Items SET @sql = 'SELECT ItemID, ' + SUBSTRING(@cols, 2) + ' FROM A GROUP BY ItemID' EXEC (@sql)
Pertanyaan ini membina pernyataan SQL secara dinamik berdasarkan nilai yang berbeza dalam lajur Item dan melaksanakannya, menjana output terpivot .
Atas ialah kandungan terperinci Bagaimana untuk Pivot Baris ke Lajur dalam DB2 Menggunakan SQL Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!