Cara mudah untuk menukar baris dan lajur SQL
Dalam SQL, adalah keperluan biasa untuk menukar data baris dan lajur untuk mendapatkan format data yang lebih praktikal. Walaupun fungsi PIVOT kelihatan rumit, sebenarnya terdapat alternatif yang lebih mudah.
Gunakan UNION ALL, agregat fungsi dan penyata KES
Jika anda tidak boleh menggunakan fungsi PIVOT, anda boleh menggunakan gabungan UNION ALL, fungsi agregat dan pernyataan CASE:
<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 UNPIVOT dan PIVOT statik
Jika nilai lajur yang hendak ditukar diketahui, anda boleh menggunakan fungsi UNPIVOT dan PIVOT:
<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 PIVOT Dinamik
Untuk bilangan lajur dan warna yang tidak diketahui, SQL dinamik boleh digunakan:
<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>
Atas ialah kandungan terperinci Bagaimana Mudah Mengubah Lajur dan Baris dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!