SQLで複数のカラムのデータを一つのカラムにまとめる方法

複数のカラムのデータを一つのカラムにまとめる方法を解説します。

複数のカラムのデータをDataGridViewのカラムに移送したいときなんかに

使えると思います。

 

下記の役割テーブルの値が「1」の場合だけ、カンマで文字列連結します。

 

f:id:HIDE_ENGINEER:20220123234608p:plain

役割テーブル

下記が実施したSQLです。

 

```sql
select
concat_ws
(
',',
CASE
WHEN d.duty_pm = 1 THEN 'PM'
ELSE NULL
END
,
CASE
WHEN d.duty_pl = 1 THEN 'PL'
ELSE NULL
END
,
CASE
WHEN d.duty_sl = 1 THEN 'SL'
ELSE NULL
END
)
AS 役割
from t_duty as d
```

このSQLですが、まずCASE文で値が「1」のときは文字列に変換し、「1」以外のときはNULLとします。

そして、変換した文字列をconcat_ws関数で連結します。

concat_ws関数は区切り文字を指定して文字列を連結できます。

さらにNULLの場合は、無視して連結しないので、NULL以外の文字列が連結されます。

 

下記が出力結果になります。

f:id:HIDE_ENGINEER:20220123235431p:plain

出力結果

※concat_ws関数は、MySQLSQL ServerPostgreSQLで使用可能だそうです。