下面的 SELECT 语句返回正确的数据。
SELECT stu.sc, stu.sn, COUNT(*) AS Total,
CASE
WHEN COUNT(*) = 3 Then 'Letter 1'
WHEN COUNT(*) = 4 Then 'Letter 2'
WHEN COUNT(*) = 5 Then 'Letter 3'
ELSE 'SARB'
END AS Letter
FROM STU join att ON (stu.SC = att.SC and stu.SN = att.SN)
WHERE att.al in ('c','t','u')
GROUP by stu.sc, stu.sn
HAVING COUNT(*) >= 3
我需要根据该查询执行更新,但我似乎无法弄清楚。我已经在网上查看了多个与我需要的示例类似的示例,但我无法使其正常工作。我需要能够做这样的事情......
UPDATE stu
SET stu.tru =
CASE
When COUNT(*) = 3 Then 'Letter 1'
When COUNT(*) = 4 Then 'Letter 2'
When COUNT(*) = 5 Then 'Letter 3'
ELSE 'SARB'
END
FROM stu JOIN att
on (stu.sc = att.sc and stu.sn = att.sn)
WHERE ATT.AL in ('c','t','u')
GROUP BY stu.sc, stu.sn
HAVING COUNT(*) >= 3
我知道我不能直接在 Update 语句中使用 Group By 和 Having,但我看到过在 Set 和 Join 之前使用 Select 和 Group By 的例子。我就是做不到。
感谢您的帮助。
最佳答案
UPDATE stu
SET tru = sub.letter
FROM
stu JOIN (
SELECT stu.sc, stu.sn,
CASE
WHEN COUNT(*) = 3 THEN 'Letter 1'
WHEN COUNT(*) = 4 THEN 'Letter 2'
WHEN COUNT(*) = 5 THEN 'Letter 3'
ELSE 'SARB'
END AS Letter
FROM STU
JOIN att ON (stu.SC = att.SC AND stu.SN = att.SN)
WHERE att.al in ('c','t','u')
GROUP by stu.sc, stu.sn
HAVING COUNT(*) >= 3
) sub ON stu.sc = sub.sc AND stu.sn = sub.sn
关于使用 CASE、GROUP BY 和 HAVING 的 SQL UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11962347/