数据表如图,
按照范围分为小于45KG,45-100KG 之间 100-300KG之间 300-500KG之间,500-1000KG之间各为一列,怎么划分!用decode,sum,sign......。请高手指点!

解决方案 »

  1.   

    select decode(sign(sal - 2000), -1, sal, 0, sal) a, --sal <=2000
           decode(sign(sal - 3000), -1, decode(sign(sal - 2000), 1, sal)) b, --sal 2000 to 3000
           decode(sign(sal - 3000), 1, sal, 0, sal) c --sal >= 3000
      from emp;
    --相应数据改下就行
    /*
    sign()函数判断表示结果0、正数还是负数,分别返回0、1、-1 ,例如: 
    引用
     
    a=10,b=20 
    则sign(a-b)返回-1
    */
      

  2.   

    如果需要做sum,你这里还少了一列
      

  3.   

    如果需要sum显示列的总数,怎么sum一下呢?谢谢...
      

  4.   

    sum函数求和,你说的列的总数是什么意思。
    最好把你需要结果的样式贴出来,方便理解
      

  5.   


    比如:201203月份的!select to_char(count(a)),to_char(count(b)),to_char(count(c)),to_char(count(d)),to_char(count(e)) from (
    select decode(sign(TOTAL_GROSS_WEIGHT - 45), -1, TOTAL_GROSS_WEIGHT, 0, TOTAL_GROSS_WEIGHT) a, --sal <=2000
    decode(sign(TOTAL_GROSS_WEIGHT - 100), -1, decode(sign(TOTAL_GROSS_WEIGHT - 45), 1, TOTAL_GROSS_WEIGHT)) b, --sal 2000 to 3000
    decode(sign(TOTAL_GROSS_WEIGHT - 300), -1, decode(sign(TOTAL_GROSS_WEIGHT - 100), 1, TOTAL_GROSS_WEIGHT)) c,
    decode(sign(TOTAL_GROSS_WEIGHT - 500), -1, decode(sign(TOTAL_GROSS_WEIGHT - 300), 1, TOTAL_GROSS_WEIGHT)) d,
    decode(sign(TOTAL_GROSS_WEIGHT - 500), 1, TOTAL_GROSS_WEIGHT, 0, TOTAL_GROSS_WEIGHT)e,SHIP_TO,REQUEST_DATE --sal >= 500
    from ASN_MST WHERE PK_NO LIKE '%GG0112%' and REQUEST_DATE>'20120301' and REQUEST_DATE<'20120331')这样写能sum出来,但是SHIP_TO,REQUEST_DATE 这两个字段,不知道怎么显示出来!
      

  6.   

    呵呵,小弟不才。包含45,不包含100。怎么也能让其他列也显示出来(就是不是deoced出来的列)。
    谢谢yinan9帮助,等一下就结贴了!分给你
      

  7.   

    做了个小case,应该能符合你的要求,部分字段修改下即可SQL> select * from ASN_MST;
     
    MONTH                TOTAL_GROSS_WEIGHT
    -------------------- ------------------
    Jan                                  45
    Jan                                 100
    Jan                                 300
    Jan                                 500
    Jan                                  35
     
    SQL> 
    SQL>  select month,
      2          sum(decode(sign(total_gross_weight - 45), -1, 1, 0)) "-45", --  <45
      3          sum(decode(sign(total_gross_weight - 100),
      4                     0,
      5                     null,
      6                     1,
      7                     null,
      8                     decode(sign(total_gross_weight - 45), -1, 0, 1))) "-100", -- 45=< total_gross_weight <100
      9          sum(decode(sign(total_gross_weight - 300),
     10                     0,
     11                     null,
     12                     1,
     13                     null,
     14                     decode(sign(total_gross_weight -100), -1, 0, 1))) "300", -- 100=< total_gross_weight <300
     15          sum(decode(sign(total_gross_weight - 500),
     16                     0,
     17                     null,
     18                     1,
     19                     null,
     20                     decode(sign(total_gross_weight - 300), -1, 0, 1))) "500", -- 300=< total_gross_weight <500
     21          sum(decode(sign(total_gross_weight - 1000),
     22                     0,
     23                     null,
     24                     1,
     25                     null,
     26                     decode(sign(total_gross_weight - 500), -1, 0, 1))) "1000"  -- 500=< total_gross_weight <1000
     27     from ASN_MST
     28    group by month;
     
    MONTH                       -45       -100        300        500       1000
    -------------------- ---------- ---------- ---------- ---------- ----------
    Jan                           1          1          1          1          1
     
      

  8.   


    谢谢...结贴!刚学oracle不久,多指教。请问哥们做几年了?