복붙노트

[SQL] 그 합류 값의 합을 SQL 업데이트

SQL

그 합류 값의 합을 SQL 업데이트

나는 그것의 합류 값의 합계에 데이터베이스의 필드를 업데이트하기 위해 노력하고있어 :

UPDATE P
SET extrasPrice = SUM(E.price)
FROM dbo.BookingPitchExtras AS E
INNER JOIN dbo.BookingPitches AS P ON E.pitchID = P.ID
    AND P.bookingID = 1
WHERE E.[required] = 1

나는이 프로그램을 실행할 때 나는 다음과 같은 오류가 발생합니다 :

"An aggregate may not appear in the set list of an UPDATE statement."

어떤 아이디어?

해결법

  1. ==============================

    1.이건 어때요:

    이건 어때요:

    UPDATE p
    SET p.extrasPrice = t.sumPrice
    FROM BookingPitches AS p
    INNER JOIN
        (
            SELECT PitchID, SUM(Price) sumPrice
            FROM BookingPitchExtras
            WHERE [required] = 1
            GROUP BY PitchID 
        ) t
        ON t.PitchID = p.ID
    WHERE p.bookingID = 1
    
  2. ==============================

    2.위의 방법으로 또 다른 표에 대한 별칭을 사용하고 있습니다 :

    위의 방법으로 또 다른 표에 대한 별칭을 사용하고 있습니다 :

    UPDATE T1 SET T1.extrasPrice = (SELECT SUM(T2.Price) FROM BookingPitchExtras T2 WHERE T2.pitchID = T1.ID)
    FROM BookingPitches T1;
    
  3. ==============================

    3.이것은 유효한 오류입니다. 이것 좀 봐. 다음 (다른 사람이 아래의 제안)이 달성 할 수있는 방법입니다 : -

    이것은 유효한 오류입니다. 이것 좀 봐. 다음 (다른 사람이 아래의 제안)이 달성 할 수있는 방법입니다 : -

    UPDATE P 
    SET extrasPrice = t.TotalPrice
    FROM BookingPitches AS P INNER JOIN
     (
      SELECT
        PitchID,
        SUM(Price) TotalPrice
      FROM
         BookingPitchExtras
      GROUP BY PitchID
      ) t
    ON t.PitchID = p.ID
    
  4. ==============================

    4.이 같은 뭔가가 필요 :

    이 같은 뭔가가 필요 :

    UPDATE P
    SET ExtrasPrice = E.TotalPrice
    FROM dbo.BookingPitches AS P
    INNER JOIN (SELECT BPE.PitchID, Sum(BPE.Price) AS TotalPrice
        FROM BookingPitchExtras AS BPE
        WHERE BPE.[Required] = 1
        GROUP BY BPE.PitchID) AS E ON P.ID = E.PitchID
    WHERE P.BookingID = 1
    
  5. ==============================

    5.저도 같은 문제로 실행하고 나는 (SQL 2005 이상 가능) 공통 테이블 식으로 해결할 수 있음을 발견 :

    저도 같은 문제로 실행하고 나는 (SQL 2005 이상 가능) 공통 테이블 식으로 해결할 수 있음을 발견 :

    ;with cte as (
        SELECT PitchID, SUM(Price) somePrice
        FROM BookingPitchExtras
        WHERE [required] = 1 
        GROUP BY PitchID)
    UPDATE p SET p.extrasPrice=cte.SomePrice
    FROM BookingPitches p INNER JOIN cte ON p.ID=cte.PitchID
    WHERE p.BookingID=1
    
  6. ==============================

    6.포스트 그레스와 함께, 나는 나를 위해 작동이 함께 솔루션을 조정했다 :

    포스트 그레스와 함께, 나는 나를 위해 작동이 함께 솔루션을 조정했다 :

    UPDATE BookingPitches AS p
    SET extrasPrice = t.sumPrice
    FROM 
        (
            SELECT PitchID, SUM(Price) sumPrice
            FROM BookingPitchExtras
            WHERE [required] = 1
            GROUP BY PitchID 
        ) t
    WHERE t.PitchID = p.ID AND p.bookingID = 1
    
  7. ==============================

    7.아래의 유사한 하위 쿼리를 사용합니다.

    아래의 유사한 하위 쿼리를 사용합니다.

    UPDATE P
    SET extrasPrice = sub.TotalPrice from
    BookingPitches p
    inner join 
    (Select PitchID, Sum(Price) TotalPrice
        from  dbo.BookingPitchExtras
        Where [Required] = 1
        Group by Pitchid
    ) as Sub
    on p.Id = e.PitchId 
    where p.BookingId = 1
    
  8. from https://stackoverflow.com/questions/2502032/sql-update-to-the-sum-of-its-joined-values by cc-by-sa and MIT license