I have been trying to solve this but could not figure it out.
so this is the table and more columns could be added:
x
+------------+-----------+------------+-----------+------------+------------+
| patient_ID | code_ID | happy? | mad? | smiling? | scared? |
+------------+-----------+------------+-----------+------------+------------+
| kkk | kgg | 1 | 0 | 1 | 1 |
+------------+-----------+------------+-----------+------------+------------+
| 2k2 | 2g2 | 0 | 1 | 0 | 1 |
+------------+-----------+------------+-----------+------------+------------+
So if the value is one then I will display it in a different row but with the value being the column header itself My boss suggested using pivot to solve this but I am open to any way.
output should be like this:
+------------+-----------+------------+
| patient_ID | code_ID | segment |
+------------+-----------+------------+
| kkk | kgg | happy? |
+------------+-----------+------------+
| kkk | kgg | smiling? |
+------------+-----------+------------+
| kkk | kgg | scared? |
+------------+-----------+------------+
| 2k2 | 2g2 | mad? |
+------------+-----------+------------+
| 2k2 | 2g2 | scared? |
+------------+-----------+------------+
Advertisement
Answer
One method is union all
:
select patient_id, code_id, 'happy?' as segment
from t
where `happy?` = 1
union all
select patient_id, code_id, 'mad?'
from t
where `mad?` = 1
union all
select patient_id, code_id, 'smiling?'
from t
where `smiling?` = 1
union all
select patient_id, code_id, 'scared?'
from t
where `scared?` = 1;