比如有两张表结构如下:
KHH         ZXYZ         YZPF(得分)
001          123            2
002          111            3
003          112            1
004          113            2
...         ...    ...        ...    ....另一张表:
ID      ZBMC 
123      年龄
111      文化程度
112      投资偏好
113      平仓情况现在想实现一个存储过程的报表统计,没有选择某个字段则效果如下:
得分   年龄  文化程度   投资偏好  ...
0      2     0         0   ...
1      3     0         0   ...
2      0     1         0   ...
3      0     0         2   ...
如果只选择年龄其它的字段不会出现,效果如下:
得分   年龄  
0      2     
1      3     
2      0     
3      0     

解决方案 »

  1.   

    这个 还算不上是动态列if(选择全部)
     select * from ..
    else
     select 选择值 from ..
      

  2.   

    可以先定义一个串变量,拼一个创建临时表的ddl语句,然后用 execute immediate 执行创建表
      

  3.   


    create table t1(khh varchar2(16),id int,yzpf int);
    insert into t1 values ('001',123,2);
    insert into t1 values ('002',111,3);
    insert into t1 values ('003',112,1);
    insert into t1 values ('004',113,2);
    create table t2(id int,zbmc varchar2(16));
    insert into t2 values(123,'年龄');
    insert into t2 values(111,'文化程度');
    insert into t2 values(112,'投资偏好');
    insert into t2 values(113,'平仓情况');declare
    --下面的变量都可以作为参数传入PL中
    --总字符串
    v_str varchar2(40):='年龄,文化程度';
    --需要分割的数量
    v_str_num int :=2;
    --各个子串的长度
    length_str1 int :=2;
    length_str2 int :=4;
    begin
    --用substr分割
    --分割后的子串拼入下面的建表语句,建内存表也可以,并发比较好。
    execute immediate 'create table temp1()';

    end;
      

  4.   

    实在不行就用java搞吧,java截字符串还是比较简单的。
                ss = tempString.split(" ");
    //     System.out.println(ss[0]);
    //     System.out.println(ss[1]);
    //     System.out.println(ss[2]);
    //     System.out.println(ss[3]);
      

  5.   

    判断入参是否为空,空就select * from ..,不空就构造选择列再select