Menukar Baris ke Lajur dalam SQL Server
Dalam SQL Server, menukar baris ke dalam lajur boleh dicapai melalui pelbagai kaedah. Selain daripada menggunakan kursor untuk membaca baris dan mengisi lajur, pendekatan alternatif wujud untuk transformasi ini.
Satu kaedah yang berkesan ialah pengagregatan bersyarat. Dengan memanfaatkan fungsi MAX() dengan pernyataan CASE, anda boleh menetapkan nilai pada lajur tertentu berdasarkan ID teg, seperti yang dilihat dalam pertanyaan berikut:
SELECT TimeSeconds, COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1, COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2, COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3, COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4 FROM table1 GROUP BY TimeSeconds
Sebagai alternatif, anda boleh memudahkan pertanyaan dengan membenarkan nilai nol bukannya 'n/a':
SELECT TimeSeconds, MAX(CASE WHEN TagID = 'A1' THEN Value END) A1, MAX(CASE WHEN TagID = 'A2' THEN Value END) A2, MAX(CASE WHEN TagID = 'A3' THEN Value END) A3, MAX(CASE WHEN TagID = 'A4' THEN Value END) A4 FROM table1 GROUP BY TimeSeconds
Kaedah lain melibatkan operator PIVOT. Ia membolehkan anda memutarkan baris ke dalam lajur berdasarkan nilai yang ditentukan:
SELECT TimeSeconds, A1, A2, A3, A4 FROM ( SELECT TimeSeconds, TagID, Value FROM table1 ) s PIVOT ( MAX(Value) FOR TagID IN (A1, A2, A3, A4) ) p
Dalam kes di mana nilai ID teg adalah dinamik, SQL dinamik boleh digunakan untuk menjana pertanyaan yang diperlukan. Dengan menggunakan fungsi STUFF() dan FOR XML PATH(), anda boleh membina senarai lajur secara dinamik dan menggunakannya dalam pertanyaan PIVOT:
DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX) SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID) FROM Table1 ORDER BY 1 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'),1,1,'') SET @sql = 'SELECT TimeSeconds, ' + @cols + ' FROM ( SELECT TimeSeconds, TagID, Value FROM table1 ) s PIVOT ( MAX(Value) FOR TagID IN (' + @cols + ') ) p' EXECUTE(@sql)
Kaedah ini menyediakan cara yang cekap untuk menukar baris ke dalam lajur dalam SQL Pelayan, memenuhi senario berbeza berdasarkan ketersediaan dan sifat nilai ID teg.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Baris ke Lajur dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!