SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table
Tetapi akar penyebab masalah Anda adalah desain database yang salah. Subjek tersebut tidak boleh berupa kolom sejak awal dan harus disimpan dalam tabel seperti output yang Anda inginkan.
Sunting
Jadi apa fungsinya?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Mengembalikan sid
kolom, kolom "virtual" dengan nilai hardcode 'Math'
yang diberi nama subject
. Karena Anda belum menyimpan nilai 'Math'
di suatu tempat, ini harus di-hardcode. Kemudian akhirnya juga memilih kolom math
menggunakan nama mark
alih-alih. Perhatikan perbedaan antara math
dan 'Math'
- satu adalah kolom yang lain string literal karena tanda kutip tunggal.
Ini dilakukan untuk ketiga mata pelajaran (jika Anda memiliki empat mata pelajaran, Anda memerlukan empat bagian dalam UNION)
UNION ALL menggabungkan ketiga SELECT menjadi satu kueri tunggal. solusi andr (yang telah diturunkan oleh seseorang yang tidak memahaminya) membuatnya lebih jelas dengan secara eksplisit memasukkannya ke dalam tabel turunan (atau tampilan sebaris).
Jalankan setiap SELECT sendiri untuk melihat apa yang dilakukan masing-masing bagian.
Bagian as mark
disebut "alias kolom" dan juga dapat digunakan untuk mengambil kolom dengan nama yang sama dari tabel yang berbeda dalam gabungan dan masih memiliki nama unik dalam kumpulan hasil.