原始表:
d_date        姓名         科室        分值1    分值2 分值3 分值4 分值5
2003-5-20 张伟       二病房          4 0 0 0 0
2003-5-20 李民     五病房          0 5 5 3 1
2003-5-20 张雷     二病房          48 5 5 6 1
2003-5-20 张副       二病房          4 10 5 3 4
2003-5-20 张伟       三病房          4 10 5 3 4
2003-5-20 张伟       六病房          4 10 5 3 4
2003-5-20 李民     三病房          4 10 5 3 1
2003-5-20 李民     二病房          4 5 5 3 1
2003-5-20 张雷     一病房          4 5 5 3 1
2003-5-20 张伟       二病房          4 5 5 3 1
2003-5-20 张雷     二病房          4 5 5 3 1
2003-5-20 张伟       一病房          4 0 5 3 1
2003-5-20 张伟       一病房          4 5 5 3 0
2003-5-20 李民     五病房          0 0 0 0 2
2003-5-20 刘军       二病房          0 0 0 0 0
2003-5-20 刘军       二病房          0 5 10 0 0
2003-5-20 张雷     二病房          0 0 0 0 0
2003-5-20 李民     三病房          4 5 5 3 1
2003-5-22 张伟       三病房          4 5 5 3 1
2003-5-22 刘军       二病房          4 5 5 0 0

要求:计算每个人的总分值,并且除以所在科室的总分值得到比例数,有一个医师在多个病房的情况。
生成表:
    姓名      科室       比例    
    张伟      三病房     17.26%

    李民      五病房     21.36%
    张伟      一病房     17.23%
请问以上SQL语句该如何写?

解决方案 »

  1.   

    1 分值1    分值2分值3分值4分值5
    有什么区别啊?select a.姓名,  a.科室,  sum(分值1  +  分值2+分值3+分值4+分值5)/总分 as 比例
    from 
    table a,
    (select 科室 ,sum(分值1  +  分值2+分值3+分值4+分值5) as 总分 from table) as b
    where a.科室 = b.科室
    groupby a.姓名, a.科室--------------------------------------
    看见了么,
    那支蛾子,
    正飞向太阳,
    那就是我!
    --------------------------------------
      

  2.   

    select 姓名  ,    科室    ,  
    100 * (分值1 + 分值2 + 分值3 + 分值4)/
    (select sum(分值1 + 分值2 + 分值3 + 分值4) from table B where A.姓名=B.姓名)  
    as 比例
    from table A
    group by 姓名  ,    科室
      

  3.   

    with query1 do
      begin
        close;
        sql.clear;
        sql.add('select 姓名,科室,sum(分数1)+sum(分数2)+sum(分数3)+sum(分数4)+sum(分数5) as 个人得分 from 表 where (rq>=rq1) and (rq<rq2) group by 科室,姓名');
        open;
      end;
      with query2 do
        begin
          close;
          sql.clear;
          sql.add('select 姓名,科室,sum(分数1)+sum(分数2)+sum(分数3)+sum(分数4)+sum(分数5) as 总得分 from 表 where (rq>=rq1) and (rq<rq2) group by 科室')
          open;
         end;
      while not query1.eof do
        begin
          while not query2.eof do
            begin
             if query1.fieldbyname('姓名').value= query2.fieldbyname('姓名').value then
                begin
                  table1.fieldbyname('比例').value:=query1.fieldbyname('个人得分').value/query1.fieldbyname('总得分').value;
                  query2.next;
                end;
            end;
          query1.next;
         end; 
    试试看。
      

  4.   

    select 姓名  ,    科室    ,  
    100 * (分值1 + 分值2 + 分值3 + 分值4)/
    (select sum(分值1 + 分值2 + 分值3 + 分值4) from table B where A.姓名=B.姓名)  
    as 比例
    from table A
    group by 姓名  ,    科室