Обновление 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."

Какие-либо идеи?

47
задан Juan Mellado 1 May 2012 в 16:01
поделиться

4 ответа

Как насчет этого:

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
65
ответ дан 26 November 2019 в 19:45
поделиться

Это допустимая ошибка. См. это . Следующие (и другие предлагаемые ниже) способы добиться этого: -

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
2
ответ дан 26 November 2019 в 19:45
поделиться

Используйте подзапрос, подобный приведенному ниже.

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
0
ответ дан 26 November 2019 в 19:45
поделиться

Вам понадобится что-то вроде этого:

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
0
ответ дан 26 November 2019 в 19:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: