我有一张桌子,用于存储属于特定班级的所有学生记录。
Class_ID|StudentID|Class_FEE
----------------------------
1001 | 0 | 100
1001 | 101 | 50
现在,另一个表存储了学生数据,而这些数据是在特定类
上注册的ClassID | StudentID
--------|-----------
1001 | 100
1001 | 101
现在第一个表0表示所有学生(此处为100,101)。现在两人都收费100,但101出于某种目的得到了50。
我需要一个o / p之类的
ClassID | StudentID | Amount
--------|-------------|--------
1001 | 100 |100
1001 | 101 | 50 (here 50 <100 so taking 50)
答案 0 :(得分:0)
你可以这样做:
select sc.studentid,
(case when f.fee < f0.fee then f.fee else f0.fee end) as fee
from studentclass sc left join
fees f
on sc.studentid = f.studentid and sc.classid = f.classid left join
fees f0
on sc.classid = f0.classid and f0.studentid = 0;
此版本假设(如您的样本数据中)学生/班级组合仅在费用表中出现一次。
答案 1 :(得分:0)
如果您对每位学生的最低费用感兴趣,可以使用
select r.classid , r.studentid, min(b.Class_FEE)
from registered r
join belongs b on b.classid = r.classid and
(b.studentid = r.studentid or 0 = b.studentid)
group by r.classid , r.studentid
<强>结果强>
ClassID StudentID Amount
-------------------------------------
1001 100 100
1001 101 50
答案 2 :(得分:0)
你可以这样做:
DECLARE @particularclass TABLE (Class_ID int, StudentID int, Class_FEE int)
DECLARE @regclass TABLE (ClassID int, StudentID int)
INSERT INTO @particularclass VALUES (1001,0,100), (1001,101,50)
INSERT INTO @regclass VALUES (1001,100), (1001,101)
SELECT R.*
,COALESCE((SELECT MIN(Class_FEE) FROM @particularclass P WHERE P.StudentID = R.StudentID)
,(SELECT CLass_FEE FROM @particularclass P WHERE P.StudentID = 0)) AS [Amount]
FROM @regclass R