SQL语句中怎么把列的值横向显示,因为列的值是动态的.customernane salesamont monthtext
aaa           1000       1
bbb           1000       1
ccc           1000       1
我要得到结果为:
                  customername             total
monthtext    aaa         bbb       ccc     
  1          1000        1000      1000     3000但我的customername的值可能还有其他的.怎么写sql语句.

解决方案 »

  1.   

    动态的SQL!
    没有其他办法!
      

  2.   

    如果只有aaa bbb ccc的话,可以用decode加group by来做select monthtext, aaa, bbb, ccc, aaa+bbb+ccc total from (select monthtext , sum(decode(customername, 'aaa', salesamont, 0)) aaa, sum(decode(customername, 'bbb', salesamont, 0)) bbb, sum(decode(customername, 'ccc', salesamont, 0)) ccc from test group monthtext)
      

  3.   

    动态SQL 行转列通用过程:
    http://blog.163.com/lzfhope/blog/static/6363992200921261358940/
      

  4.   

    动态拼语句
    declare
    sqlstr varchar2(2000):='select monthtext';
    sqlstr1 varchar2(1000);
    begin
    for cur1 in (select distinct customername from t)
    loop
      sqlstr:=sqlstr||'
      ,max(decode(customername,'''||cur1.customername||''',salesamont))'||cur1.customername;
      sqlstr1:=sqlstr1||'+nvl('||cur1.customername||',0)';
    end loop;
    sqlstr:='select t1.*,'||ltrim(sqlstr1,'+')||'total from(
      '||sqlstr||'
      from t
      group by monthtext)t1';
    dbms_output.put_line(sqlstr);
    end;
      

  5.   

    用decode 和 case when  then 做判断吧
      

  6.   

    我感觉使用 case when  then 最简单