日期:2014-05-16  浏览次数:20801 次

特难的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