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.
select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv
2. PIVOT:
Fungsi PIVOT kemudian menormalkan semula data dengan menukar nilai hari ke dalam lajur. Ini akan menghasilkan jadual transposed.
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
Nota:
Mohon pada pertanyaan anda:
Untuk menukar pertanyaan khusus anda, anda boleh menggunakan kod diubah suai berikut:
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
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!