Ini dilakukan dengan tabel pivot . Pengelompokan berdasarkan id
, Anda mengeluarkan CASE
pernyataan untuk setiap nilai yang ingin Anda tangkap dalam kolom dan gunakan sesuatu seperti MAX()
agregat untuk menghilangkan nol dan menciutkan menjadi satu baris.
SELECT
id,
/* if col1 matches the name string of this CASE, return col2, otherwise return NULL */
/* Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */
MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name,
MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2,
MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3
FROM
yourtable
GROUP BY id
ORDER BY id
Berikut contoh yang berfungsi
Catatan:Ini hanya berfungsi sebagaimana adanya untuk jumlah nilai yang mungkin dan terbatas untuk col1
. Jika jumlah nilai yang mungkin tidak diketahui, Anda perlu membuat pernyataan SQL secara dinamis dalam satu lingkaran.