日期:2014-05-18  浏览次数:20453 次

监狱问题 第2季
昨天问了一个关于监狱的问题 想不到有那么多朋友回答 多谢了!今天再问一个问题:)

有一个关于犯人案件性质的统计表 [案件性质],表中有字段“杀人”,“伤害”,“抢劫”,“盗窃”,“强奸”,“绑架”等等。
每个监狱在表中又且只有一条记录,表示这个监狱所有犯人涉嫌罪名的分布情况

问题来了,现在我们要求出一张表,表中不但每个监狱的各种涉嫌罪名的量,还要有 每一种涉嫌罪名的量 与 所有罪名的总量 的比值,但是,[案件性质]表中的字段是时时刻刻在增加的,比如某天多出了一种罪名[某某罪],那么[案件性质]表中就要增加一个字段[某某罪],要求在[案件性质]表中字段增加的情况下不改表SQL语句一样能查出所有涉嫌罪名的量与涉嫌罪名的量对所有罪名的总量的比值

说明:如果按照每个犯人只有一个罪名来看 所有罪名的总量就等于这个监狱的犯人总数。
  如果杀人犯有100人,那么 杀人犯涉嫌罪名的量就是100。

------解决方案--------------------
SQL code
--我觉得你应该把那些类型放到一个字段如:犯罪字段,然后使用动态SQL求各人数和总人数,但比例求不出,因为数据是动态的
declare @sql varchar(8000)
set @sql = 'select 监狱名称'
select @sql = @sql + ' , sum(case Subject when ''' + 犯罪字段 + ''' then 1 else 0 end) [' + 犯罪字段 + ']'
from (select distinct 犯罪字段 from tb) as a
set @sql = @sql + ',count(*) as 总人数 from tb group by 监狱名称'
exec(@sql)