我有一个看起来像这样的表:
+--------+-----------+------------+-----------+
| Group# | Person A | Person B | Person C |
+--------+-----------+------------+-----------+
| 1 | yes | no | no |
| 2 | no | yes | yes |
| 3 | yes | yes | yes |
我想对此数据使用SQL查询,该值将在一列中返回Group#,在值= yes时返回第二列中的列标题。对于上表,我想要的结果如下所示:
+-----------+----------+
| Group# | Person |
+-----------+----------+
| 1 | Person A |
| 2 | Person B |
| 2 | Person C |
| 3 | Person A |
| 3 | Person B |
| 3 | Person C |
+-----------+----------+
*请注意,与我的示例相比,我的实际数据列数多于行数。
谢谢。
答案 0 :(得分:0)
在我看来,最好的方法是横向连接。但最通用的方法只是union all
:
select group#, 'personA' as person
from t
where personA = 'yes'
union all
select group#, 'personB' as person
from t
where personB = 'yes'
union all
select group#, 'personC' as person
from t
where personC = 'yes';
回答你的下一个问题。 。 。是的,你必须明确列出列。但是,您可以在元数据表上使用SQL查询来生成您真正想要的查询。然后执行该查询。