使用sql将宽格式数据转换为长格式

zynd9foi  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(342)

我最近开始使用sql进行数据操作。所以,原谅我,如果这是太基本了。我有以下格式的数据表1。

id  pg_a  pg_b
12   1     0
35   1     1
46   0     1

我想把它转换成下表所示的长格式。

id  pg  value
12  a     1
12  b     0
35  a     1
35  b     1
46  a     0
46  a     1

我有一个sql查询使用case的时候,但是运气不好。在两个case语句中,查询只执行第一个case语句。
以下是查询:

select id,
(case when pg_a is not null then pg_a
     when pg_b is not null then pg_b
     else null 
 end) AS pg,
(case when pg_a is not null then a
      when pg_b is not null then b
      else null
 end) AS value
from table1

我需要做什么不同的事情?任何提示都将不胜感激。
先谢谢你。

db2dz4w8

db2dz4w81#

可以使用横向连接:

select t.id, v.*
from t cross join lateral
     (values ('a', pg_a), ('b', pg_b)
     ) v(pg, value);

如果您是sql新手,您可能会更习惯使用sql union all :

select id, 'a' as pg, pg_a as value
from t
union all
select id, 'b', pg_b
from t;

相关问题