Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengubah Lajur dan Baris dengan Cekap dalam SQL?
Transposisi Lajur dan Baris SQL: Panduan Praktikal
SQL selalunya memerlukan transposing data – menukar orientasi jadual daripada menegak (lajur) kepada mendatar (baris) atau sebaliknya. Walaupun perintah PIVOT
wujud, ia boleh menyusahkan. Panduan ini meneroka alternatif yang lebih mudah.
Kaedah 1: UNION ALL, Agregat dan Penyata KES
Pendekatan ini menggunakan UNION ALL
untuk menyahpangsi, kemudian fungsi agregat (di sini, SUM
) dan pernyataan CASE
untuk mengulang:
<code class="language-sql">select name, sum(case when color = 'Red' then value else 0 end) Red, sum(case when color = 'Green' then value else 0 end) Green, sum(case when color = 'Blue' then value else 0 end) Blue from ( select color, Paul value, 'Paul' name from yourTable union all select color, John value, 'John' name from yourTable union all select color, Tim value, 'Tim' name from yourTable union all select color, Eric value, 'Eric' name from yourTable ) src group by name</code>
Kaedah 2: UNPIVOT dan PIVOT Statik
Mengetahui bilangan lajur untuk diubah membolehkan penyelesaian UNPIVOT
dan PIVOT
statik:
<code class="language-sql">select name, [Red], [Green], [Blue] from ( select color, name, value from yourtable unpivot ( value for name in (Paul, John, Tim, Eric) ) unpiv ) src pivot ( sum(value) for color in ([Red], [Green], [Blue]) ) piv</code>
Kaedah 3: Pangsi Dinamik untuk Lajur Boleh Ubah
Apabila berurusan dengan bilangan lajur dan warna yang dinamik, SQL dinamik menawarkan penyelesaian:
<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX), @query AS NVARCHAR(MAX), @colsPivot as NVARCHAR(MAX) select @colsUnpivot = stuff((select ','+quotename(C.name) from sys.columns as C where C.object_id = object_id('yourtable') and C.name <> 'color' for xml path('')), 1, 1, '') select @colsPivot = STUFF((SELECT ',' + quotename(color) from yourtable t FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'select name, '+@colsPivot+' from ( select color, name, value from yourtable unpivot ( value for name in ('+@colsUnpivot+') ) unpiv ) src pivot ( sum(value) for color in ('+@colsPivot+') ) piv' exec(@query)</code>
Kaedah ini menyediakan pendekatan serba boleh untuk transposisi data dalam SQL, menyesuaikan diri dengan pelbagai keperluan manipulasi data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Lajur dan Baris dengan Cekap dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!