Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memindahkan Baris ke Lajur dengan Cekap dalam Pelayan SQL?
Memindahkan baris ke lajur dalam SQL Server ialah tugas biasa apabila bekerja dengan data yang disimpan dalam format jadual. Secara tradisinya, ini telah dicapai menggunakan kursor, yang boleh memakan masa dan tidak cekap. Artikel ini meneroka kaedah alternatif untuk transposisi baris, menawarkan penyelesaian yang elegan dan berprestasi.
Satu pendekatan ialah menggunakan pengagregatan bersyarat, yang memanfaatkan fungsi COALESCE() untuk menangani kehilangan nilai.
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
Pertanyaan ini menjana output dengan nilai pemegang tempat ('n/a') kerana kehilangan data.
Pilihan lain ialah menggunakan fungsi PIVOT, yang membolehkan penciptaan lajur dinamik.
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
Ini pendekatan menjana output dengan nilai NULL untuk data yang hilang.
Jika bilangan lajur tidak tetap dan mesti ditentukan secara dinamik, SQL dinamik boleh digunakan.
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)
Pertanyaan ini membina pernyataan PIVOT dinamik berdasarkan nilai TagID unik dalam jadual.
Kaedah ini menyediakan penyelesaian yang cekap dan boleh disesuaikan untuk menukar baris ke lajur dalam SQL Server. Dengan memilih pendekatan yang sesuai berdasarkan ciri data dan keperluan prestasi, anda boleh memudahkan tugas manipulasi data dan meningkatkan kecekapan pelaksanaan pertanyaan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memindahkan Baris ke Lajur dengan Cekap dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!