0

我目前从我的查询中得到这个输出:-

Count(Total)| Type1
-----------------
 24            T1

  22           T2

但我想要这样的输出: -

 T1   T2
----------
 24   22

请注意,Type1列可以包含任何值,例如 T1、T2、T3,因此我无法修复查询中的值。我正在使用 Oracle 10g,我该怎么做?

4

1 回答 1

1

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>

请参阅带有演示的 SQL Fiddle

或者您可以将其直接实现到与此类似的查询中,使用聚合将计算与语句中的值SUM()匹配的每次出现:type1CASE

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
于 2012-11-05T12:05:38.457 回答