Hello semua,
Saya mempunyai jadual seperti yang ditunjukkan dalam tangkapan skrin di atas. Saya menulis pertanyaan menggunakan penyataan CASE
supaya ia akan mengembalikan lajur tambahan yang saya perlukan. Berikut ialah pertanyaan yang saya tulis:
SELECT *, KES BILA (JUMLAH(KES WHEN kelas = 'kelas 1' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION OLEH student_id)) >= 1 THEN 1 ELSE 0 END AS 'Class 1', KES BILA (JUMLAH(KES KETIKA kelas = 'kelas 2' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION BY student_id)) >= 1 THEN 1 ELSE 0 END AS 'Kelas 2', KES BILA (JUMLAH(KES KETIKA kelas = 'kelas 3' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION BY student_id)) >= 1 THEN 1 ELSE 0 END AS 'Kelas 3', KES BILA (JUMLAH(KES KETIKA kelas = 'kelas 4' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION BY student_id)) >= 1 THEN 1 LAIN 0 TAMAT SEBAGAI 'Kelas 4' DARI qa;
Ini ialah jadual keputusan yang saya dapat:
Apa yang saya ingin capai dalam pertanyaan ini ialah jika pelajar menghadiri kursus, ia akan memaparkan
Contohnya, pelajar dengan
Saya telah mencapai apa yang saya mahukan dalam pertanyaan, tetapi sekarang daripada menggunakan
Boleh saya tahu bagaimana saya harus mengubah suai pertanyaan untuk mendapatkan output akhir dalam tangkapan skrin di atas?
Soalan kedua:
Seperti yang anda lihat dalam pertanyaan di atas, setiap kelas mempunyai CASE
penyataan yang berasingan untuk membuat lajur untuk kelas itu. Walau bagaimanapun, pada masa hadapan mungkin terdapat 5,6,7,... kelas, jadi apabila terdapat kelas baharu yang berbeza, saya perlu menambah penyata CASE
Adakah saya boleh mengoptimumkan pertanyaan saya supaya saya tidak perlu mempunyai 4 CASE
penyata untuk 4 kelas berbeza, tetapi masih boleh mencipta lajur untuk kelas yang berbeza (apabila terdapat kelas baharu , akan ada lajur baharu) kelas juga)?
buat jadual qa( student_id INT, kelas varchar(20), tarikh_tarikh_akhir_kelas, tarikh_daftar_tarikh ); masukkan ke dalam qa (id_pelajar, kelas, tarikh_akhir_kelas, tarikh_pendaftaran) nilai (1, 'kelas 1', '2022-03-03', '2022-02-14'), (1, 'kelas 3', '2022-06-13', '2022-04-12'), (1, 'kelas 4', '2022-07-03', '2022-06-19'), (2, 'kelas 1', '2023-03-03', '2022-07-14'), (2, 'kelas 2', '2022-08-03', '2022-07-17'), (4, 'kelas 4', '2023-03-03', '2022-012-14'), (4, 'kelas 2', '2022-04-03', '2022-03-21') ;
LihatPivotuntuk prosedur tersimpan yang akan menjana dan [secara pilihan] menjalankan pertanyaan berdasarkan definisi jadual dan data.
Ini ialah contoh yang mengandungi tarikh_akhir_kelas dan tarikh_pendaftaran -