我想在Postgresql中将单行转换为多行,其中删除了一些列.这是当前输出的示例:
- name | st | ot | dt |
- -----|----|----|----|
- Fred | 8 | 2 | 3 |
- Jane | 8 | 1 | 0 |
- Samm | 8 | 0 | 6 |
- Alex | 8 | 0 | 0 |
使用以下查询:
- SELECT
- name,st,ot,dt
- FROM
- times;
这就是我想要的:
- name | t | val |
- -----|----|-----|
- Fred | st | 8 |
- Fred | ot | 2 |
- Fred | dt | 3 |
- Jane | st | 8 |
- Jane | ot | 1 |
- Samm | st | 8 |
- Samm | dt | 6 |
- Alex | st | 8 |
解决方法
- SELECT
- times.name,x.t,x.val
- FROM
- times cross join lateral (values('st',st),('ot',ot),('dt',dt)) as x(t,val)
- WHERE
- x.val <> 0;