日期:2014-05-17  浏览次数:20564 次

求助,关于统计百分比的问题
本帖最后由 lixiaolian7 于 2012-11-15 06:31:22 编辑 结构及数据如下

id      market          name    content         option          total
101 区内市场 黑龙江 加油站排队情况 经常排队 21
101 区内市场 黑龙江 加油站排队情况 分时段排队 142
101 区内市场 黑龙江 加油站排队情况 无排队 353
101 区内市场 黑龙江 是否限量销售 汽柴油均限量 46
101 区内市场 黑龙江 是否限量销售 只有汽油限量 9
101 区内市场 黑龙江 是否限量销售 只有柴油限量 455
101 区内市场 黑龙江 是否限量销售 无限量销售 6
101 区内市场 黑龙江 断档情况 只有汽油出现断档 13
101 区内市场 黑龙江 断档情况 只有柴油出现断档 17
101 区内市场 黑龙江 断档情况 无断档 455
101 区内市场 黑龙江 断档情况 汽柴油均出现断档 31
101 区内市场 黑龙江 脱销情况 汽柴油均出现脱销 NULL
101 区内市场 黑龙江 脱销情况 只有汽油出现脱销 2
101 区内市场 黑龙江 脱销情况 只有柴油出现脱销 513
101 区内市场 黑龙江 脱销情况 无脱销 1
101 区内市场 黑龙江 加油站是否停业检修 否 24
101 区内市场 黑龙江 加油站是否停业检修 是 35


这是一个调查结果的数据表
content字段是调查的问题
option是调查的选项
total是该调查选项的数量
我希望统计出每种调查的选项在该问题下占到的百分之
例如加油站是否停业检修问题有两个选项,是和否。是选项有70个数量否选项有30个数量,那么统计结果就是一个是70%一个是30%。

想了半天没有想到方法

谢谢


补充:
实际上把所有的选项case when也可以计算出百分比,但是我的问题是和选项是动态从别的表读出来的…所以想找个能直接分组计算的方法…
SQL基础不扎实,希望大家能帮忙…
谢谢
------最佳解决方案--------------------
技术有限,搞的很复杂,期待高手
CREATE TABLE TBA
(
id int,
market nvarchar(50),   
name1 nvarchar(50),
content1 nvarchar(50),
option1 nvarchar(50),
total int
)
drop table TBA
INSERT INTO TBA
select '101','区内市场','黑龙江','加油站排队情况','经常排队',42 union
select '101','区内市场','黑龙江','加油站排队情况','分时段排队',21 union
select '101','区内市场','黑龙江','加油站排队情况','无排队',353 union
select '101','区内市场','黑龙江','是否限量销售','汽柴油均限量',46 union
select '101','区内市场','黑龙江','是否限量销售','只有汽油限量',9 union
select '101','区内市场','黑龙江','是否限量销售','只有柴油限量',455 union
select '101','区内市场','黑龙江','是否限量销售','无限量销售',6 union
select '101','区内市场','黑龙江','断档情况','只有汽油出现断档',13 union
select '101','区内市场','黑龙江','断档情况','只有柴油出现断档',17 union
select '101','区内市场','黑龙江','断档情况','无断档',455 union
select '101','区内市场','黑龙江','断档情况','汽柴油均出现断档',31 union
select '101','区内市场','黑龙江','脱销情况','汽柴油均出现脱销',NULL union
select '101','区内市场','黑龙江','脱销情况','只有汽油出现脱销',2 union
select '101','区内市场','黑龙江','脱销情况','只有柴油出现脱销',513 union
select '101','区内市场','黑龙江','脱销情况','无脱销',1 union
select '101','区内市场','黑龙江','加油站是否停业检修','否',24 union
select '101','区内市场','黑龙江','加油站是否停业检修','是',35

select A.*,convert(nvarchar(8),convert(numeric(18,2),convert(numeric(18,2),isnull(A.total,0))/convert(numeric(18,2),B.NUM) )* 100) 
+ '%' 百分比 from TBA A,
(select SUM(total) as NUM,content1 from TBA  group by content1) B 
where A.content1=B.content1

101 区内市场 黑龙江 加油站是否停业检修 否 24 41.00%
101 区内市场 黑龙江 加油站是否停业检修 是 35 59.00%
101 区内市场 黑龙江 加油站排队情况 分时段排队 21 5.00%
101 区内市场 黑龙江 加油站排队情况 经常排队 42 10.00%
101 区内市场 黑龙江 加油站排队情况 无排队 353 85.00%
101 区内市场 黑龙江 断档情况 汽柴油均出现断档 31 6.00%
101 区内市场 黑龙江 断档情况 无断档 455 88.00%
101 区内市场 黑龙江 断档情况 只有柴油出现断档 17 3.00%
101 区内市场 黑龙江 断档情况 只有汽油出现断档 13 3.00%
101 区内市场 黑龙江 是否限量销售 汽柴油均限量 46 9.00%
101 区内市场 黑龙江 是否限量销售 无限量销售 6 1.00%
101 区内市场 黑龙江 是否限量销售 只有柴油限量 455 88.00%
101 区内市场 黑龙江 是否限量销售 只有汽油限量 9 2.00%
101 区内市场 黑龙江 脱销情况 汽柴油均出现脱销 NULL 0.00%
101 区内市场 黑龙江 脱销情况 无脱销 1 0.00%
101 区内市场 黑龙江 脱销情况 只有柴油出现脱销 513 99.00%
101 区内市场 黑龙江 脱销情况 只有汽油出现脱销