[英]Oracle SQL group by
我表中有以下数据,
Id month value
1 Jun 20
1 Jul 22
1 Aug 0
1 Sep 12
2 Jun 21
2 Jul 45
我需要将它们分组为
Id Jun Jul Aug Sep
1 20 22 0 12
2 21 45
我不确定应该使用哪种语法。 感谢帮助
@Gurwinder的答案是可行的。 您也可以使用数据透视表(在Oracle 11或更高版本中):
select *
from (
select id, month, value
from your_table
)
pivot (
max(value)
for month in ('Jun' as "Jun", 'Jul' as "Jul", 'Aug' as "Aug", 'Sep' as "Sep")
)t
请尝试以下:
select id,
sum(decode(month, 'Jun', value)) jun,
sum(decode(month, 'Jul', value)) jul,
sum(decode(month, 'Aug', value)) aug,
sum(decode(month, 'Sep', value)) sep
from my_table group by id
您没有提到Oracle的版本。 如果您使用的是Oracle 11g或更高版本,则以下示例将使您入门。
create table pivot_test (id number(1), month varchar2(3), value number(2));
insert into pivot_test values (1, 'Jun', 20);
insert into pivot_test values (1, 'Jul', 22);
insert into pivot_test values (1, 'Aug', 0);
insert into pivot_test values (1, 'Sep', 12);
insert into pivot_test values (2, 'Jun', 21);
insert into pivot_test values (2, 'Jul', 45);
commit;
select *
from (select id, month, sum(value) as value from pivot_test group by id, month)
pivot (SUM(value) for (month) in ('Jun', 'Jul', 'Aug', 'Sep'))
order by id
;
它产生以下结果。
ID 'Jun' 'Jul' 'Aug' 'Sep'
---------- ---------- ---------- ---------- ----------
1 20 22 0 12
2 21 45
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.