使用 CASE、GROUP BY 和 HAVING 的 SQL UPDATE

标签 sql sql-server

下面的 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/

相关文章:

mysql - 我需要在此 SQL 指令中添加什么来过滤某些项目?

SQL:如果基表发生变化,临时表在以后调用时会返回不同的结果吗?

c# - 如何在 C# 中从具有多个返回值的存储过程中获取剩余输出

c# - 获取插入值的主键

mysql - 使用多个表的 phpmyadmin 查询

sql - 如果有相同的记录,我会增加数值,或者如果没有,则插入想做0

sql - 如何计算 SQL Bigquery 中另一个事件之前特定事件的数量?

mysql - sql选择在第二个表中没有关系的记录

mysql - 在 SQL 中执行 CASE WHEN 语句时出现错误

mysql - 2 一个 SQL 查询中同一列的日期