我目前从我的查询中得到这个输出:-
Count(Total)| Type1
-----------------
24 T1
22 T2
但我想要这样的输出: -
T1 T2
----------
24 22
请注意,Type1
列可以包含任何值,例如 T1、T2、T3,因此我无法修复查询中的值。我正在使用 Oracle 10g,我该怎么做?
我目前从我的查询中得到这个输出:-
Count(Total)| Type1
-----------------
24 T1
22 T2
但我想要这样的输出: -
T1 T2
----------
24 22
请注意,Type1
列可以包含任何值,例如 T1、T2、T3,因此我无法修复查询中的值。我正在使用 Oracle 10g,我该怎么做?
Oracle 10g 没有PIVOT
函数,因此您可以使用带有 a 的聚合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