日期:2014-05-19  浏览次数:20790 次

求一个月内,商品(按名称分类)销量求和,从高到低排序,然后统计,有哪些商品销售量的和(从高到低)达到了50%..
要求见标题,
示例数据如下:
格式如下:  
字段分别为:  
日期,   型号,   销售量
12.1       A           2
12.1       B           1
12.1       C           1
12.1       E           3
12.1       F           1
12.1       H           2
12.1       I           1
12.2       A           1
12.2       C           1
12.2       D           1
12.2       E           4
12.2       H           2    

上面一共销售了20台(不管型号)..我要知道,哪些商品卖得最好.因此,我可以求合,排序.
得到的结果集为:(不管日期了).
型号,     销售号
E               7
H               4
A               3
C               2
B               1
D               1
F               1
I               1      
现在,我想知道,哪些商品我售量占到了总销量的:20%,     很明显,是E   7,如果我要知道销量占到50%的是哪些,很明显,       是:E       7,,   H       4,,     如果要达到80%,     那就是E,H   ,A,C   了..


------解决方案--------------------
create table ta(日期 varchar(5), 型号 varchar(2), 销售量 int)
insert ta
select '12.1 ', 'A ', 2
union all select '12.1 ', 'B ', 1
union all select '12.1 ', 'C ', 1
union all select '12.1 ', 'E ', 3
union all select '12.1 ', 'F ', 1
union all select '12.1 ', 'H ', 2
union all select '12.1 ', 'I ', 1
union all select '12.2 ', 'A ', 1
union all select '12.2 ', 'C ', 1
union all select '12.2 ', 'D ', 1
union all select '12.2 ', 'E ', 4
union all select '12.2 ', 'H ', 2

select 型号,销售号=sum(销售量),销售号=sum(销售量),
百分比=str(convert(numeric(5,2),sum(销售量))/(select sum(销售量) from ta),5,2)--转换整数
from ta group by 型号
having str(convert(numeric(5,2),sum(销售量))/(select sum(销售量) from ta),5,2)=.35--定义表达式等于35%就行了
order by 销售号 desc

型号 销售号 销售号 百分比
---- ----------- ----------- -----
E 7 7 0.35

(所影响的行数为 1 行)


------解决方案--------------------
上面一共销售了20台(不管型号)..我要知道,哪些商品卖得最好.因此,我可以求合,排序.
得到的结果集为:(不管日期了).
型号, 销售号
E 7
H 4
A 3
C 2
B 1
D 1
F 1
I 1
现在,我想知道,哪些商品我售量占到了总销量的:20%, 很明显,是E 7,如果我要知道销量占到50%的是哪些,很明显, 是:E 7,, H 4,, 如果要达到80%, 那就是E,H ,A,C 了..

个人认为,这个结果具有不确定性,就拿
如果我要知道销量占到50%的是哪些,很明显, 是:E 7,, H 4,来说,也有可能是E7,A3,B2
你是如何确定要取得的货品内容呢!按大小排序也不是合理!需求不明确!