2017-07-03 64 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