现在有数据表sy_fy
bumen      leixing      payout_t
a            aa             10
b            bb             10
c            cc            30要求显示结果为
bumen      leixingaa       leixingbb    leixingcc     小计
a             10                0            0           10
b                              10            0           10
c             0                 0            30          30leixing这个字段是不确定的    通过其他条件查询出来的

解决方案 »

  1.   


    SQL> 
    SQL> with t as(
      2       select 'a' bumen,'aa' leixing,10 payout_t from dual union all
      3       select 'b','bb',10 from dual union all
      4       select 'c','cc',30 from dual)
      5  select bumen
      6        ,max(decode(leixing,'aa',payout_t,0)) leixingaa
      7        ,max(decode(leixing,'bb',payout_t,0)) leixingbb
      8        ,max(decode(leixing,'cc',payout_t,0)) leixingcc
      9        ,sum(payout_t)
     10  from t
     11  group by bumen
     12  /
     
    BUMEN  LEIXINGAA  LEIXINGBB  LEIXINGCC SUM(PAYOUT_T)
    ----- ---------- ---------- ---------- -------------
    a             10          0          0            10
    b              0         10          0            10
    c              0          0         30            30
      

  2.   


    SQL> select bumen,
      2         leixingaa,
      3         leixingbb,
      4         leixingcc,
      5         leixingaa + leixingbb + leixingcc as 小计
      6    from (select bumen,
      7                 decode(leixing, 'aa', payout_t, 0) as leixingaa,
      8                 decode(leixing, 'bb', payout_t, 0) as leixingbb,
      9                 decode(leixing, 'cc', payout_t, 0) as leixingcc
     10            from sy_fy) t;
     
    BUMEN                 LEIXINGAA  LEIXINGBB  LEIXINGCC         小计
    -------------------- ---------- ---------- ---------- ----------
    a                            10          0          0         10
    b                             0         10          0         10
    c                             0          0         30         30
      

  3.   

    这样列不是动态的     LEIXINGAA  LEIXINGBB  LEIXINGCC ……leixingnn    这个类型是通过查询出来的不是固定的
      

  4.   

    1、不固定可以使用存储过程来动态拼接类似固定列的SQL
    2、oracle列是有限制的,最大1000列。
      

  5.   

    固定与否,不过是列的别名嘛!在嵌套视图里面另命一名不就得了啊!
    要的是下面的数据,只要按照固定格式显示就可以了,比如这里的aa,bb,cc