我目前从我的查询中获取此输出: -
Count(Total)| Type1
-----------------
24 T1
22 T2
但我希望输出如下: -
T1 T2
----------
24 22
请注意,Type1
列可以包含任何值,如T1,T2,T3,因此我无法修复查询中的值。我正在使用Oracle 10g,我该怎么办?
答案 0 :(得分:1)
Oracle 10g没有PIVOT
功能,因此您可以使用CASE
的聚合:
select
sum(case when type1 = 'T1' then total end) T1,
sum(case when type1 = 'T2' then total end) T2
from <yourquery goes here>
或者您可以将此直接实现到与此类似的查询中,使用SUM()
聚合将计算与type1
语句中的CASE
值匹配的每个匹配项:
select
sum(case when type1 = 'T1' then 1 else 0 end) T1,
sum(case when type1 = 'T2' then 1 else 0 end) T2
from yourtable
如果您有一个未知数量的值要转换为列,那么您将需要使用类似于此的过程:
CREATE OR REPLACE procedure dynamic_pivot(p_cursor in out sys_refcursor)
as
sql_query varchar2(1000) := 'select ';
begin
for x in (select distinct type1 from yourtable order by 1)
loop
sql_query := sql_query ||
' , sum(case when type1 = '''||x.type1||''' then 1 else 0 end) as '||x.type1;
dbms_output.put_line(sql_query);
end loop;
sql_query := sql_query || ' from yourtable';
open p_cursor for sql_query;
end;
/
然后执行它:
variable x refcursor
exec dynamic_pivot(:x)
print x