Anmelden

View Full Version : SQL Update Datei mit den Ergebnis aus einer CTE



oulbrich
09-03-17, 08:07
Hallo zusammen,

ich möchte eine Tabelle mit dem Ergebnis aus eine CTE updaten.

Beim UPDATE kommt es zur Fehlermeldung. "[SQL0199] Schlüsselwort UPDATE nicht erwartet. Gültige Token: ( SELECT VALUES."

Kann man innerhalb ein CTE kein Update machen?


with
-- Tabelle A1 kummulieren aller Umsätze einer Kundenauftragspos
a1 as(
select distinct kunde, auftrag, pos, sum(umsatz)
from Artikelhistorie a1
where a1.Datum between 20170101 and 20171231
group by kunde, auftrag, pos
),
-- Tabelle A2 ermitteln aller gültigen Pos
a2 as(
select kunde, auftrag, pos AuftragsPostionen a2
inner join GueltigePositionen a3
on a2.Kunde = a3.kunde
where a3.Status = 'OK'
),
-- Tabelle A3 Ergebnis aus A1/A2
a3 as (select distinct Kunde, sum(Umsatz) as GesamtUmatz, count(pos)
from a1
join a2
ON a1.kunde = a2.kunde
group by kunde)
-- Update des Gesamtumsatzes aus A3 in ein Tabelle A4 ???????
update GesamtUmsatzKunde a4
set a4. Umsatz = a3.GesamtUmsatz
from A3
where A4.Kunde=A3.kunde

BenderD
09-03-17, 09:08
... aus der SQL reference:
The table name of a common table expression can only be referenced in the
select-statement, INSERT statement, or CREATE VIEW statement that defines it.

D*B

PS: CTEs sind ohnehin eher ein Verwirr feature und nur in wenigene Fällen sinnvoll (recursive CTE). In allen anderen Fällen sind Views die bessere Lösung, oft sogar nested selects.

Fuerchau
09-03-17, 09:43
Es gaht auch so, da du jede CTE nur 1 x brauchst:

update mytable
set f1 = (select ... from (select ... from (select ... from ) a3) a2) a1)
where ...