【问题标题】:How to get a list of fields and distinct values from a table如何从表中获取字段列表和不同值
【发布时间】:2021-05-19 09:28:04
【问题描述】:
我需要将列转换为行,然后将不同的值放在旁边。理想情况下使用 postgresql,但如果解决方案更容易,可以使用 python。还需要是动态的,因为每次运行转换时字段都会有所不同。我已经通过搜索进行了搜索,但很难找到与此类似的任何内容。
源数据表:
| option1 |
option2 |
option3 |
| 1 |
A |
X |
| 1 |
B |
Y |
| 2 |
A |
X |
| 3 |
B |
Y |
| 3 |
A |
X |
目标表:
| fieldname |
option |
| option1 |
1 |
| option1 |
2 |
| option1 |
3 |
| option2 |
A |
| option2 |
B |
| option3 |
X |
| option3 |
Y |
【问题讨论】:
标签:
python
sql
postgresql
unpivot
【解决方案1】:
有两种方法可以做到这一点
- 使用
UNNEST
select distinct
unnest(array['option1','option2','option3']),
unnest(array[option1,option2,option3])
from test
order by 1,2
- 使用
Cross Join Lateral
select distinct t2.*
from test t1
cross join lateral (
values
('option1',t1.option1 ),
('option2',t1.option2),
('option3',t1.option3)
) as t2(option, value)
order by 1,2
DEMO