SQL将列标题转换为行值

时间:2018-05-22 01:27:01

标签: sql csv

我有一个看起来像这样的表:

+--------+-----------+------------+-----------+
| 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 |
+-----------+----------+

*请注意,与我的示例相比,我的实际数据列数多于行数。

谢谢。

1 个答案:

答案 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查询来生成您真正想要的查询。然后执行该查询。