我正在尝试编写一个SQL查询,它返回每个员工测试得分的最大值,每个测试都在自己的列中。
到目前为止,我想出了:
SELECT E.id,
Concat(E.firstname, ' ', E.middlename, ' ', E.lastname) AS FullName,
score1.maxscore,
score2.maxscore
FROM employees AS E,
(SELECT empid,
Max(Cast(score AS DECIMAL)) AS MaxScore
FROM filledsoc
WHERE socid = '87bf5fba-5702-4304-869c-8707956d34d0'
GROUP BY empid) AS score1,
(SELECT empid,
Max(Cast(score AS DECIMAL)) AS MaxScore
FROM filledsoc
WHERE socid = '340363d9-e9a2-478b-b819-d3a56d337561'
GROUP BY empid) AS score2
WHERE E.id = score1.empid
AND E.id = score2.empid
这只是一个testquery,最终的查询将动态构建。我的问题是查询只返回所有列都有值的结果。
如果其中一个subquerys返回空,则全部跳过该员工。
我需要的是一个返回表'employees'中所有行的查询,只有当它存在时才填充score1.maxscore和score2.maxscore。如果它不是'0'或没有什么会好的......
对此有任何帮助将不胜感激。
米歇尔
答案 0 :(得分:1)
SELECT E.ID, CONCAT(E.FirstName, ' ', E.MiddleName, ' ', E.LastName) AS FullName,
(
SELECT MAX(CAST(F1.Score AS DECIMAL))
FROM FilledSOC AS F1
WHERE F1.SocID = '87bf5fba-5702-4304-869c-8707956d34d0'
AND E.ID = F1.EmpID
) AS Score_1,
(
SELECT MAX(CAST(F2.Score AS DECIMAL))
FROM FilledSOC AS F2
WHERE F2.SocID = '340363d9-e9a2-478b-b819-d3a56d337561'
AND E.ID = F2.EmpID
) AS Score_2
FROM Employees AS E