2012-12-16 68 views
2

我在这个查询中有一些问题,我想看看谁支付最大费用,哪个医生? 我已经创建了3个表名是tblPatient,tblClinic和tblDoctor现在我已经在PID和DID列的tblClinic表上设置了外键现在我可以在这个查询中做什么,所以我会得到我想要的结果。SQL内部连接与最大功能

create database Hospital 
use Hospital 

create table tblPatient 
(
PID int identity(100,1) primary key not null, 
PName varchar(20), 
PPhone varchar(20) 
) 

create table tblClinic 
(
CID int identity(300,1) primary key not null, 
PID int, 
DID int, 
Fees int, 
foreign key(PID) references tblPatient(PID), 
foreign key(DID) references tblDoctor(DID) 
) 

create table tblDoctor 
(
DID int identity(200,1) primary key not null, 
DName varchar(20), 
DPhone varchar(20), 
) 

insert into tblPatient values('Zeeshan',033314785) 
insert into tblPatient values('Mufaddil',034521548) 
insert into tblPatient values('Shayan',033236981) 
insert into tblPatient values('Zahid',0334425632) 
insert into tblPatient values('Afzaal',030178945) 
insert into tblClinic values (100,201,1500) 
insert into tblClinic values (102,202,1600) 
insert into tblClinic values (103,204,700) 
insert into tblClinic values (101,201,800) 
insert into tblClinic values (101,200,600) 
insert into tblClinic values (103,202,650) 
insert into tblClinic values (104,202,550) 
insert into tblClinic values (102,203,840) 
insert into tblClinic values (101,203,2000) 
insert into tblClinic values (100,204,250) 
insert into tblClinic values (100,201,1700) 
insert into tblClinic values (101,202,1650) 
insert into tblClinic values (104,204,300) 
insert into tblDoctor values ('Dr.Amir',033412345) 
insert into tblDoctor values ('Dr.Bilal',034554125) 
insert into tblDoctor values ('Dr.Saim',033358741) 
insert into tblDoctor values ('Dr.Rizwan',033325871) 
insert into tblDoctor values ('Dr.Kamran',030025874) 

select * from tblPatient 
select * from tblClinic 
select * from tblDoctor 

select p.PName,d.DName 
from tblPatient p 
inner join 
tblClinic c 
ON p.PID=c.PID 
inner join 
tblDoctor d 
ON d.DID=c.DID 
where PName in ('Zeeshan','Shayan','Afzaal') 

select d.DName,p.PName 
from tblDoctor d 
inner join 
tblClinic c 
ON d.DID=c.DID 
inner join 
tblPatient p 
ON p.PID=c.PID 
where d.DName in ('Dr.Bilal','Dr.Kamran','Dr.Amir') 
order by d.DName,p.PName asc 

select d.DName,p.PName,c.Fees 
from tblDoctor d 
inner join 
tblClinic c 
ON d.DID=c.DID 
inner join 
tblPatient p 
ON p.PID=c.PID 
where d.DName in ('Dr.Bilal','Dr.Kamran','Dr.Amir') 
order by d.DName,p.PName asc 

回答

13

如果你想找到哪个病人已支付的最高费用为每个医生, 此查询应该这样做:

SELECT P.PName, D.DName, C.Fees 
FROM tblClinic C 
INNER JOIN tblPatient P ON P.PID = C.PID 
INNER JOIN tblDoctor D ON D.DID = C.DID 
WHERE C.Fees = 
(SELECT max(Fees) FROM tblClinic C2 
WHERE C2.DID = C.DID) 
4

试试这个。这里是working example from your data

select pname,dname, fee 
from (
    select pname, dname, max(fees) fee, 
      rank() over (order by p.pname) rk, 
      row_number() over (order by p.pname,max(fees) desc) rn 
    from tblClinic c join tblPatient p on c.pid = p.pid 
       join tblDoctor d on c.did = d.did 
    group by pname,dname 
) T 
where rk = rn 

结果

Afzaal  Dr.Saim   550 
Mufaddil Dr.Rizwan  2000 
Shayan  Dr.Saim   1600 
Zahid  Dr.Kamran  700 
Zeeshan  Dr.Bilal  1700