3

以下の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を実行する必要がありますが、理解できないようです。必要なものに似た複数の例をオンラインで調べましたが、これを機能させることができません。私はこのようなことをすることができる必要があります...

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

GroupByとHavingina Updateステートメントを直接使用できないことは知っていますが、SetandJoinの前にSelectwithGroupByを使用する例を見てきました。私はそれを機能させることができません。

助けてくれてありがとう。

4

2 に答える 2

4
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
于 2012-08-14T23:39:33.917 に答える
3
WITH CTE AS (
  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 = cte.Letter
FROM stu  JOIN cte
   on (stu.sc = cte.sc and stu.sn = cte.sn)
于 2012-08-14T23:40:54.117 に答える