原始表:
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语句该如何写?
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语句该如何写?
有什么区别啊?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.科室--------------------------------------
看见了么,
那支蛾子,
正飞向太阳,
那就是我!
--------------------------------------
100 * (分值1 + 分值2 + 分值3 + 分值4)/
(select sum(分值1 + 分值2 + 分值3 + 分值4) from table B where A.姓名=B.姓名)
as 比例
from table A
group by 姓名 , 科室
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;
试试看。
100 * (分值1 + 分值2 + 分值3 + 分值4)/
(select sum(分值1 + 分值2 + 分值3 + 分值4) from table B where A.姓名=B.姓名)
as 比例
from table A
group by 姓名 , 科室