使用しているRDBMSを指定しませんでしたが、データのピボットを解除して、null以外の値を含むデータを返すことができます。UNPIVOT
関数がない場合は、 UNION ALL
:を使用できます。
select col1, 'val1' col, val1
from yourtable
where val1 is not null
union all
select col1, 'val2' col, val2
from yourtable
where val2 is not null
union all
select col1, 'val3' col, val3
from yourtable
where val3 is not null
union all
select col1, 'val4' col, val4
from yourtable
where val4 is not null
union all
select col1, 'val5' col, val5
from yourtable
where val5 is not null
SQL FiddlewithDemoを参照してください。
unpivot関数を備えたRDBMSがある場合、クエリは次のようになります。
select col1, col, value
from yourtable
unpivot
(
value
for col in (val1, val2, val3, val4, val5)
) unpiv;
SQL FiddlewithDemoを参照してください。データは個別の列ではなく行として返されますが、結果は次のようになります。
| COL1 | COL | VALUE |
-----------------------
| A | val1 | 1 |
| A | val5 | 1 |
| B | val2 | 1 |
| B | val4 | 1 |
| C | val1 | 1 |
| C | val3 | 1 |