特难的SQL,请高书帮助,急,跪求各位大峡!!!
我的表结构是这样的
itemcode 销售数量 次数 级别
00001 15 2
00002 15 2
00003 10 1
00004 10 2
00005 10 1
00006 8 2
00007 8 1
00008 7 1
00009 6 2
00010 5 2
00011 3 2
00012 1 1
00013 1 1
00014 1 1
我的要求是根据销售总数量进行汇总,然后根据销售数量的排序(desc)一条一条往下加,当达到销售总数量40%时,次数>1的级别为A1,等于1的级别为A2,然后重新从下条开始累加,达到销售总数量36%时, 次数>1的级别为B1,等于1的级别为B2,达到销售总数量18%时, 次数>1的级别为C1,等于1的级别为C2,达到销售总数量6%时, 次数>1的级别为D1,等于1的级别为D2,
具体结果为:
itemcode 销售数量 次数 级别
00001 15 2 A1
00002 15 2 A1
00003 10 1 A2
00004 10 2 B1
00005 10 1 B2
00006 8 2 B1
00007 8 1 B2
00008 7 1 C2
00009 6 2 C1
00010 5 2 C1
00011 3 2 D1
00012 1 1 D2
00013 1 1 D2
00014 1 1 D2
------解决方案--------------------使用Oracle的分析函数(over,dense)。
------解决方案--------------------这可行吗?
如果前面不是正好的40%,36%,比如41%,36%,18%,5%,那5%的部分将永远不可能被分类了
------解决方案--------------------这种需求用SQL能做,用程序写吧.
------解决方案--------------------这个要用存储过程去实现了
------解决方案--------------------直接使用分析函数肯定能做出来,但要累伤人的。
还上赞同使用存贮过程。
------解决方案--------------------
------解决方案--------------------條件有點多
------解决方案--------------------
SQL code
-- 好象也不复杂啊,发现规律就好办
SQL> select * from test;
ITEMCODE SALS CS JB
---------- ---------- ---------- ----
00001 15 2
00002 15 2
00003 10 1
00004 10 2
00005 10 1
00006 8 2
00007 8 1
00008 7 1
00009 6