Teknik Transposing SQL untuk Nilai Medan Ditakrifkan Pengguna
Dalam SQL, anda mungkin menghadapi situasi di mana anda perlu menukar data yang disimpan dalam baris ke membentuk lajur. Satu contoh sedemikian ialah apabila anda mempunyai jadual seperti yang diterangkan di bawah:
================================================ | Id | UserId | FieldName | FieldValue | =====+========+===============+================| | 1 | 100 | Username | John Doe | |----+--------+---------------+----------------| | 2 | 100 | Password | pass123! | |----+--------+---------------+----------------| | 3 | 102 | Username | Jane | |----+--------+---------------+----------------| | 4 | 102 | Password | $ecret | |----+--------+---------------+----------------| | 5 | 102 | Email Address | [email protected] | ------------------------------------------------
Untuk menukar data ini ke dalam format yang mana FieldNames menjadi pengepala lajur dan FieldValues membentuk data baris yang sepadan, anda boleh memanfaatkan berikut pertanyaan SQL:
SELECT t.userid MAX(CASE WHEN t.fieldname = 'Username' THEN t.fieldvalue ELSE NULL END) AS Username, MAX(CASE WHEN t.fieldname = 'Password' THEN t.fieldvalue ELSE NULL END) AS Password, MAX(CASE WHEN t.fieldname = 'Email Address' THEN t.fieldvalue ELSE NULL END) AS Email FROM TABLE t GROUP BY t.userid
Walau bagaimanapun, untuk pendekatan ini berfungsi dengan berkesan, anda perlu mentakrifkan pernyataan CASE untuk setiap FieldName yang dijangkakan nilai. Untuk meningkatkan fleksibiliti, pertimbangkan untuk melaksanakan sintaks Penyata Disediakan (SQL dinamik) MySQL untuk menjana pernyataan CASE ini secara dinamik.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Nilai Medan Ditakrifkan Pengguna dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!