Mau*_*hah 6 sql sql-server join group-by
我有三张桌子
学生:Sid,SName,SEmail
Fees_Type:Fid,FName,FPrice
学生费用:Sid(来自学生的FK),Fid(来自Fees_Type的FK),FDate
每个表的数据:
Student :
SID |SName | SEmail
1 | ABC | ABC@www.com
2 | XYZ | xyz@www.com
Fees_Type:
Fid | FName | FPrice
1 | Chess | 100
2 | Cricket | 200
StudentFees:
Sid | Fid| FDate
1 | 1 | 5/2
1 | 2 | 6/2
2 | 1 | 7/2
2 | 2 | 8/2
1 | 1 | 6/2
Run Code Online (Sandbox Code Playgroud)
现在我想获取数据
SID|SName|SEmail | Total_Chess_Played|Total_Cricket_Played | ToTal_Fees
1 | ABC |ABC@www.com | 2 | 1 | 400
2 | XYZ |xyz@www.com | 1 | 1 | 300
Run Code Online (Sandbox Code Playgroud)
我已尝试过以下查询,但无法获得分组或完美结果
SELECT s.sId, SEmail, SName, FName ,FPrice
FROM Student s
INNER JOIN StudentFees sf ON s.sId = sf.EId
INNER JOIN Fees_Type f ON f.fId = sf.fId
WHERE MONTH(pr.TDDate) = MONTH(dateadd(dd, 1, GetDate())) AND
YEAR(pr.TDDate) = YEAR(dateadd(dd, -1, GetDate()))
Run Code Online (Sandbox Code Playgroud)
我是SQL新手.所以请帮助我
谢谢.
你可以这样做:
SELECT
Student.SID,
Student.SName,
Student.SEmail,
SUM(CASE WHEN Fees_Type.FName='Chess' THEN 1 ELSE 0 END) AS Total_Chess_Played,
SUM(CASE WHEN Fees_Type.FName='Cricket' THEN 1 ELSE 0 END) AS Total_Cricket_Played,
SUM(Fees_Type.FPrice) AS ToTal_Fees
FROM
Student
JOIN StudentFees ON Student.sId = StudentFees.EId
JOIN Fees_Type ON Fees_Type.fId = StudentFees.fId
WHERE
MONTH(StudentFees.TDDate) = MONTH(dateadd(dd, 1, GetDate())) AND
YEAR(StudentFees.TDDate) = YEAR(dateadd(dd, -1, GetDate()))
GROUP BY
Student.SID,
Student.SName,
Student.SEmail
Run Code Online (Sandbox Code Playgroud)