日期            井号 日产液   日产油
2013/1/1 古256 20.7  5.0 
2013/1/1 古257 14.7  4.0 
2013/1/1 古258 17.4  3.5 
2013/1/1 古259 16.5  3.0 
2013/1/1 古260 7.0  2.0 
2013/1/1 古261 17.4  2.5 
2013/1/1 古262 16.5  0.5 
2013/1/1 古263 7.0  0.8 
2013/1/1 古264 16.5  0.0 
2013/1/1 古265 7.0  0.1 
2013/1/1 古266 17.4  4.0 
2013/1/2 古256 20.7  6.0 
2013/1/2 古257 14.7  5.0 
2013/1/2 古258 17.4  4.0 
2013/1/2 古259 16.5  3.0 
2013/1/2 古260 7.0  2.6 
2013/1/2 古261 17.4  2.7 
2013/1/2 古262 16.5  0.4 
2013/1/2 古263 7.0  0.6 
2013/1/2 古264 16.5  0.0 
2013/1/2 古265 7.0  0.3 
2013/1/2 古266 17.4  5.0 目的:把上面数据进行分类,日产油大于等于3吨的求和,大于1吨小于3吨的求和,小于1吨的求和。每天单独汇总
结果如下格式(说明列是为了更好的懂SQL达到的目的):
日期 日产液 日产油          说明
2013/1/1 70.2 16.5 A类
2013/1/1 40.9 12.5 B类
2013/1/1 64.4 1.4 C类
2013/1/2 86.7 23 A类
2013/1/2 24.4 5.3 B类
2013/1/2 47 1.3 C类如何写SQL 语句完成以上功能呢?SQL  分类汇总  复杂性高SQL汇总查询

解决方案 »

  1.   

    select t1.time "日期",
           sum(t1.pro1) "日产液",
           sum(t1.pro2) "日产油",
           t1.descrip "说明"
      from (select t.time,
                   t.num,
                   t.pro1,
                   t.pro2,
                   case
                     when t.pro2 >= 3 then
                      'A类'
                     when (t.pro2 < 3 and t.pro2 >1) then
                      'B类'
                     else
                      'C类'
                   end descrip
              from test t) t1
     group by t1.time, t1.descrip
     order by t1.time,t1.descrip;注:=1t 的放在C类的结果:
      

  2.   

    with tlv as (
    SELECT 'TypeA' type,0 下限,0.9999 上限 from dual union
    SELECT 'TypeB',1,2.9999 from dual union
    SELECT 'TypeC',3,99999999 from dual)
    SELECT 日期,sum(日产液),sum(日产油),type from t1,tlv
           WHERE t1.日产油 between 下限 and 上限
           GROUP BY 日期,type
    如果有经常计算各种分类的,可以create真的tlv来使用,更灵活方便