2017-07-03 65 views
1

這是視圖SQL錯誤BY

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

這是因爲創建視圖的方式而發生的。查找原始表格和更新值是最安全的方式。或者我們需要修改視圖。 –

+0

在上面的視圖中,我將SELECT查詢與表混合在一起。我想我會先在表格中插入查詢。然後使用這兩個表創建一個新視圖並在此視圖上運行更新。當它以這種方式工作時,我會更新我的問題。 – user1673665

回答

0

我相信你應該在你的子查詢中使用group by,而不是在join階段。

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 
+0

感謝您的答案,但我不明白的是你說「不使用視圖」,但更新「UpdateAuftragsvolumenAngebot」?另外,我在GROUP BY部分中收到語法錯誤。首先以其他方式創建「UpdateAuftragsvolumenAngebot」而不是視圖? – user1673665

+1

是的,所以我的意思是採取的觀點,並把它放入內部聯接(查看邏輯在這裏)作爲s ...我改變了我的上述邏輯一點,以幫助更多。我不確定CSDokument的PK是如此難以辨別,如果這可以正常工作或沒有。 – Jesse