[英]pivoting a sql query going from wide to long format in ORACLE
我有这样的SQL查询
select
group,
sum(case when field1 = 'a' then 1 else 0 end ) as typea,
sum(case when field1 = 'b' then 1 else 0 end ) as typeb
from mytable
group by group
结果就像
group typea typeb
1 10 30
2 20 40
效果很好,但我需要这样的结果:
group types value
1 typea 10
2 typea 30
1 typeb 20
2 typeb 40
有没有办法修改此查询:
select
group,
sum(case when field1 = 'a' then 1 else 0 end ) as typea,
sum(case when field1 = 'b' then 1 else 0 end ) as typeb
from mytable
group by group
这样它将返回我需要的结果?
注意-正在使用ORACLE
谢谢。
使用UNION ALL
:
select "group",
'typea' AS type,
sum(1) AS value
from mytable
where field1 = 'a'
group by "group"
UNION ALL
select "group",
'typeb',
sum(1)
from mytable
where field1 = 'b'
group by "group"
数据已经正确组织,您只需要进行不同的分组即可。
SELECT "group", 'type'||field1 as Types, sum(1) as value
FROM mytable
GROUP BY "group", 'type'||field1
ORDER BY Types, "group"
注释组是一个保留字,因此如果可以将其列和类型重命名,则将其放在“”中,长期来看会更好,因为一个是保留字,另一个是关键字。
With MyTable("group",field1) as (select 1, 'a' from dual UNION ALL
select 1 , 'a' as field1 from dual UNION ALL
select 1 , 'b' as field1 from dual UNION ALL
select 1 , 'b' as field1 from dual UNION ALL
select 2 , 'a' as field1 from dual UNION ALL
select 2 , 'a' as field1 from dual UNION ALL
select 2 , 'a' as field1 from dual UNION ALL
select 2 , 'b' as field1 from dual)
SELECT "group", 'type'||field1 as Types, sum(1) as value
FROM mytable
GROUP BY "group", 'type'||field1
尽管为什么需要将“类型”作为字段1的前缀,这很奇怪。 这可能只是一个简单的(无关键性的)计数,并且似乎仅需分组。
SELECT "group", field1 as Types, count(*) as value
FROM mytable
GROUP BY "group", field1
ORDER BY Types, "group"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.