加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 将一行转换为具有较少列的多行

发布时间:2021-01-19 00:54:52 所属栏目:编程 来源:网络整理
导读:我想在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,dtFROM times; 这就

我想在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;

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读