这是视图
SELECT src.OfferAngebotsnummer AS OAngNr1,
SUM(src.Summe2) AS Summe,
CSDokument_1.OfferAngebotsnummer AS OAngNr2,
CSDokument_1.Auftragsvolumen
FROM (
SELECT OfferAngebotsnummer,
ROUND(Angebotssumme, 2) AS Summe2
FROM dbo.CSDokument
WHERE (MANeu = 'AS400') AND
(Art = '3') AND
(DokumentTyp = '3')) AS src
INNER JOIN
dbo.CSDokument AS CSDokument_1 ON
src.OfferAngebotsnummer = CSDokument_1.OfferAngebotsnummer
GROUP BY src.OfferAngebotsnummer,
CSDokument_1.OfferAngebotsnummer,
CSDokument_1.Auftragsvolumen
这是UPDATE
声明
update UpdateAuftragsvolumenAngebot
set Auftragsvolumen = Summe
where Auftragsvolumen <> Summe
但是我收到一条错误消息,表示不允许在UPDATE
子句的视图上使用group by
。
Cannot update the view or function 'UpdateAuftragsvolumenAngebot'
because it contains aggregates, or a DISTINCT or GROUP BY clause,
or PIVOT or UNPIVOT operator.
如何完成UPDATE
?
答案 0 :(得分:1)
我建议不要使用视图,只需将其移动到相关的子查询中,如下所示。我建议,因为只要您聚合视图,就无法更新基础表。
update CSDokument
set Auftragsvolumen = Summe
from CSDokument
inner join
(
SELECT OfferAngebotsnummer,
ROUND(Angebotssumme, 2) AS Summe2
FROM dbo.CSDokument
WHERE (MANeu = 'AS400') AND
(Art = '3') AND
(DokumentTyp = '3')) AS src
INNER JOIN
dbo.CSDokument AS CSDokument_1 ON
src.OfferAngebotsnummer = CSDokument_1.OfferAngebotsnummer
GROUP BY src.OfferAngebotsnummer,
CSDokument_1.OfferAngebotsnummer,
CSDokument_1.Auftragsvolumen
) as s
on s.OfferAngebotsnummer = CSDokument.OfferAngebotsnummer
where CSDokument.Auftragsvolumen <> s.Summe
答案 1 :(得分:0)
我相信你应该在你的子查询中使用group by而不是在join阶段。