Transpose Senarai Berbilang Pelayan SQL
Transposisi jadual bermaksud menukar baris kepada lajur dan lajur kepada baris. Ini amat berguna apabila anda perlu memutar data untuk analisis atau pembentangan.
Soalan:
Anda mahu menukar jadual dengan berbilang lajur daripada format berikut:
Day | A | B |
---|---|---|
Mon | 1 | 2 |
Tue | 3 | 4 |
Wed | 5 | 6 |
Thu | 7 | 8 |
Fri | 9 | 0 |
Tukar kepada format berikut:
Value | Mon | Tue | Wed | Thu | Fri |
---|---|---|---|---|---|
A | 1 | 3 | 5 | 7 | 9 |
B | 2 | 4 | 6 | 8 | 0 |
Penyelesaian:
Untuk menukar berbilang lajur dalam SQL, anda boleh menggunakan fungsi UNPIVOT dan PIVOT bersama-sama.
1. UNPIVOT:
Fungsi UNPIVOT menyahnormalkan data dengan menukar lajur kepada baris. Ini mencipta jadual baharu dengan tiga lajur: hari, kol dan nilai.
<code class="language-sql">select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv</code>
2. PIVOT:
Fungsi PIVOT kemudian menormalkan semula data dengan menukar nilai hari ke dalam lajur. Ini akan menghasilkan jadual transposed.
<code class="language-sql">select * from ( select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv ) src pivot ( max(value) for day in (Mon, Tue, Wed, Thu, Fri) ) piv</code>
Nota:
Mohon pada pertanyaan anda:
Untuk menukar pertanyaan khusus anda, anda boleh menggunakan kod diubah suai berikut:
<code class="language-sql">select * from ( select LEFT(datename(dw,datetime),3) as DateWeek, col, value from DataTable cross apply ( values ('A', ACalls), ('B', BCalls) ) c (col, value) ) src pivot ( sum(value) for dateweek in (Mon, Tue, Wed, Thu, Fri) ) piv</code>
Ini akan menjana jadual transposed dalam format yang diingini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memindahkan Jadual Berbilang Lajur dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!