これは、ピボットテーブルを使用して行われます。 。 id
によるグループ化 、CASE
を発行します 列にキャプチャしてMAX()
のようなものを使用する各値のステートメント 集計してヌルを削除し、1行に折りたたみます。
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
これが実用的なサンプルです
注:これは、col1
の可能な値の有限で既知の数に対してのみそのまま機能します。 。可能な値の数が不明な場合は、SQLステートメントを動的にループで構築する必要があります。