Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengubah Lajur dan Baris dengan Mudah dalam SQL?
Dalam SQL, selalunya perlu menukar baris dan lajur. Walaupun PIVOT kelihatan seperti alat yang sesuai, terdapat situasi di mana ia kelihatan terlalu rumit. Nasib baik, terdapat beberapa alternatif yang lebih mudah untuk mencapai penukaran ini.
Jika PIVOT kelihatan menakutkan, anda boleh menggunakan UNION ALL digabungkan dengan fungsi agregat dan pernyataan CASE untuk meniru fungsinya:
<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>
Jika anda tahu lajur dan warna tertentu yang ingin anda tukar, anda boleh kod keras untuk pelaksanaan 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>
Untuk kes di mana bilangan lajur dan warna tidak diketahui, SQL dinamik boleh digunakan untuk menjana senarai yang diperlukan:
<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>
Tidak kira kaedah yang anda pilih, hasilnya adalah sama:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Lajur dan Baris dengan Mudah dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!