解决方案 »

  1.   

    这种情况sql是达不到你想要的效果的,还是要在结果集或者界面展示时做处理。
      

  2.   

    这个简单吧。用case when就可以搞定了。
      

  3.   

    select
    门店,
    case when 销售时间=2014年1月份 then sum(销售数量) as '2014年一月份',
    case when 销售时间=2014年2月份 then sum(销售数量) as '2014年二月份',
    case when 销售时间=2014年3月份 then sum(销售数量) as '2014年三月份'
    from  表 group by...
      

  4.   

    楼主要的是动态的,选择多少日期显示多少,case when都写死了,一般动态的,表头要单独生成,data 要组合显示
      

  5.   

    写个存储过程或是函数,根据条件来拼接动态SQL,返回游标
      

  6.   

    请问版本是多少?在11g下,可以使用如下两步操作实现:
    第一步,获取时间列
    select listagg(to_char(add_months(to_date('2014-01-01','yyyy-mm-dd'),rownum-1),'yyyy-mm'),',') within group(order by 1)from user_objects where rownum 
    <=months_between(to_date('2014-03-30','yyyy-mm-dd'),to_date('2014-01-01','yyyy-mm-dd'))+1
    获得:'2014-01','2014-02','2014-03'第二步,使用pivot转换
      with t as (
    select 'code1' as md,'2014-1-1' as sj,1 as sl from dual
    union select 'code1' ,'2014-1-2',1  from dual
    union select 'code1' ,'2014-2-2',1  from dual
    union select 'code2' ,'2014-2-2',2  from dual
    union select 'code2' ,'2014-2-4',2  from dual
    union select 'code1' ,'2014-3-1',2  from dual
    union select 'code1' ,'2014-3-2',1  from dual
    union select 'code2' ,'2014-3-2',1  from dual
    )select * from (select to_char(to_date(t.sj,'yyyy-mm-dd'),'yyyy-mm') as ly,t.md,t.sl
    from t)tmp 
    pivot(
    sum(sl) 
    for ly
    in('2014-01','2014-02','2014-03')
    );获得如下结果:
    MD    '2014-01'              '2014-02'              '2014-03'              
    ----- ---------------------- ---------------------- ---------------------- 
    code1 2                      1                      3                      
    code2                        4                      1                      
      

  7.   

    行转列。语句根据条件,来拼出来
    参考http://bbs.csdn.net/topics/330039676