日期:2014-05-16  浏览次数:20971 次

SQLServer语法转Oracle
原表格式与格式是这样的一个格式
A1 A2 A3
指标1 11 1
指标2 12 1
指标3 13 1
指标1 14 2
指标2 15 2
指标3 16 2
指标1 17 3

最终想要的一个结果为
指标1 指标2 指标3
11 12 13  
14 15 16  
17 0 0  

现在在SQLServer中已经写好了这个语句
SQL code

DECLARE @sql VARCHAR(8000)
SET @sql = 'select A3'
SELECT  @sql = @sql + '  ,max(case A1 when ''' + A1
        + ''' then A2 else 0 end) [' + A1 + ']'
FROM    ( SELECT DISTINCT
                    A1
          FROM      Table_1
        ) AS a
SET @sql = @sql + ' from Table_1 group by A3'
EXEC(@sql) 



现在要把他转换成Oracle。但是由于对Oracle不太熟悉。所以请大家帮帮忙

------解决方案--------------------
那就类似这样写好了。
SQL code

declare 
var_sql_str varchar2(2000);
type test_array is table of Table_1.A1%type INDEX BY BINARY_INTEGER;
 var_test_array test_array;
 begin 
 select distinct A1  bulk collect into var_test_array from Table_1;
 var_sql_str:='select A3'
 for i in 1..var_test_array.count loop
 begin
 var_sql_str:=var_sql_str||', max(case A1 when '''||var_test_array(i)||''' then A2 else 0 end) as '||var_test_array(i)||''
 end loop;
 var_sql_str:=var_sql_str||' from Table_1 group by A3'
 execute immediate var_sql_str;
 end ;