oracle如何按照范围分列!求高手帮忙...

民工阿春 2012-11-05 02:01:17

数据表如图,
按照范围分为小于45KG,45-100KG 之间 100-300KG之间 300-500KG之间,500-1000KG之间各为一列,怎么划分!用decode,sum,sign......。请高手指点!
...全文
226 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinan9 2012-11-05
  • 打赏
  • 举报
回复
加上实习快三年了,互相学习
民工阿春 2012-11-05
  • 打赏
  • 举报
回复
引用 11 楼 yinan9 的回复:
做了个小case,应该能符合你的要求,部分字段修改下即可 SQL code 123456789101112131415161718192021222324252627282930313233343536373839404142434445 SQL> select * from ASN_MST; MONTH TOTAL_GROSS_W……
谢谢...结贴!刚学oracle不久,多指教。请问哥们做几年了?
yinan9 2012-11-05
  • 打赏
  • 举报
回复
做了个小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
 
民工阿春 2012-11-05
  • 打赏
  • 举报
回复
引用 9 楼 yinan9 的回复:
真心被你搞的凌乱了,咋就一个问题都描述不清呢,云里雾里的。 45-100之间 包含 45或者100吗
呵呵,小弟不才。包含45,不包含100。怎么也能让其他列也显示出来(就是不是deoced出来的列)。 谢谢yinan9帮助,等一下就结贴了!分给你
yinan9 2012-11-05
  • 打赏
  • 举报
回复
真心被你搞的凌乱了,咋就一个问题都描述不清呢,云里雾里的。 45-100之间 包含 45或者100吗
民工阿春 2012-11-05
  • 打赏
  • 举报
回复
引用 7 楼 yinan9 的回复:
引用 6 楼 liuchunchunLove 的回复: 引用 5 楼 yinan9 的回复:引用 4 楼 liuchunchunLove 的回复: 引用 3 楼 yinan9 的回复:如果需要做sum,你这里还少了一列 如果需要sum显示列的总数,怎么sum一下呢?谢谢... sum函数求和,你说的列的总数是什么意思。 最好把你需要结果的样式贴出来,方便理解 就是这样的!按月求……
比如: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 这两个字段,不知道怎么显示出来!
yinan9 2012-11-05
  • 打赏
  • 举报
回复
引用 6 楼 liuchunchunLove 的回复:
引用 5 楼 yinan9 的回复:引用 4 楼 liuchunchunLove 的回复: 引用 3 楼 yinan9 的回复:如果需要做sum,你这里还少了一列 如果需要sum显示列的总数,怎么sum一下呢?谢谢... sum函数求和,你说的列的总数是什么意思。 最好把你需要结果的样式贴出来,方便理解 就是这样的!按月求总和
这样好办了,把你表的相关字段给我
民工阿春 2012-11-05
  • 打赏
  • 举报
回复
引用 5 楼 yinan9 的回复:
引用 4 楼 liuchunchunLove 的回复:
引用 3 楼 yinan9 的回复:如果需要做sum,你这里还少了一列
如果需要sum显示列的总数,怎么sum一下呢?谢谢...
sum函数求和,你说的列的总数是什么意思。
最好把你需要结果的样式贴出来,方便理解



就是这样的!按月求总和
yinan9 2012-11-05
  • 打赏
  • 举报
回复
引用 4 楼 liuchunchunLove 的回复:
引用 3 楼 yinan9 的回复:如果需要做sum,你这里还少了一列 如果需要sum显示列的总数,怎么sum一下呢?谢谢...
sum函数求和,你说的列的总数是什么意思。 最好把你需要结果的样式贴出来,方便理解
民工阿春 2012-11-05
  • 打赏
  • 举报
回复
引用 3 楼 yinan9 的回复:
如果需要做sum,你这里还少了一列
如果需要sum显示列的总数,怎么sum一下呢?谢谢...
yinan9 2012-11-05
  • 打赏
  • 举报
回复
如果需要做sum,你这里还少了一列
ssqtjffcu 2012-11-05
  • 打赏
  • 举报
回复
要想什么样的显示结果,说详细点行不
yinan9 2012-11-05
  • 打赏
  • 举报
回复
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
*/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧