数据库为oracle。表名: tbl_person(人口表)
列: id(主键)、  type(有老人、青年、儿童等)place(地区)
slq要求如下:
(一)按地区统计各地区的人口,并统计总人数,如下所示:注意,第一行还要统计全国的!地区          老人      老人所占比例         青年        青年所占比例       儿童          儿童所占比例     全国          555696647     17%              698415784      35%             1258452336     32%
北京          68989         19%              53163413       33%             258523365      31%
上海          7998          19%              53163413       33%             258523365      31%
山东          ....          ....             ........       ...             ........       ....(二)按地区统计各地区人口,并显示各类叠加人数的人口,如下所示:注意,第一行还要统计全国的!地区     老人和儿童   老人和儿童所占比例   青年和儿童  青年和儿童所占比例  儿童和老人   儿童和老人所占比例     全国     555696647     17%                698415784       35%                 1258452336        32%
北京     68989         19%                53163413        33%                 258523365         31%
上海     7998          19%                53163413        33%                 258523365         31%
山东     ....          ....               ........       ...             ........       ....请各位赐教!

解决方案 »

  1.   

    (一)按地区统计各地区的人口,并统计总人数,如下所示:注意,第一行还要统计全国的! 
    select '全国' "地区", sum(decode(type, '老人', 1, 0)) '老人', (sum(decode(type, '老人', 1, 0))/count(1))*100||'%' "老人所占比例", sum(decode(type, '青年', 1, 0)) '青年', (sum(decode(type, '青年', 1, 0))/count(1))*100||'%' "青年所占比例",  sum(decode(type, '儿童', 1, 0)) '儿童', (sum(decode(type, '儿童', 1, 0))/count(1))*100||'%' "儿童所占比例" from tbl_person
    union 
    select place "地区", sum(decode(type, '老人', 1, 0)) '老人', (sum(decode(type, '老人', 1, 0))/count(1))*100||'%' "老人所占比例", sum(decode(type, '青年', 1, 0)) '青年', (sum(decode(type, '青年', 1, 0))/count(1))*100||'%' "青年所占比例",  sum(decode(type, '儿童', 1, 0)) '儿童', (sum(decode(type, '儿童', 1, 0))/count(1))*100||'%' "儿童所占比例" from tbl_person group place
    第二个和第一个类似的方式不过是
    sum(decode(type, '老人', 1, 0)) '老人'
    改成
    sum(decode(type, '老人', 1, '儿童', 1, 0)) '老人和儿童'(sum(decode(type, '老人', 1, 0))/count(1))*100||'%' "老人所占比例"
    改成
    (sum(decode(type, '老人', 1, '儿童', 1, 0))/count(1))*100||'%' "老人和儿童所占比例"
      

  2.   


    如果type只有这几个选择,inthirties 的已经解决问题了
      

  3.   

    楼主,应该是要开发相关报表的吧.可建议用各种报表开发工具实现,例如SQL SERVER 的REPORTING SERVER.尽管是SQL SERVER的,相关数据源也可取.你上述的问题,只需要用MDX语句查询,就可简单实现.报表选择菊阵便可.否则的话,可能要写动态SQL语句来拼接相关纬度.
    幸好,你只是有两个纬度,分别是区域以及年龄化,假如再多的纬度的话,写SQL 将很吃力.只提供参考,谢谢.