![]() |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Zitat:
Code:
(select SUM(B.Brutto) as Summe from BEL B
where (B.Art = 'BLUBB' or B.Art = 'BLA') and ((B.Adr > '' and B.Adr = ADR.Adr) or (B.Adr = '' and B.KDNR = ADR.Adr)) |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
:cry: Nach 5 Minuten habe ich abgebrochen...
Ich mache mal ein SQL mit 2 Tabelle und Daten... Nachtrag:
Code:
Original SQL Bedingung:
create table ADR
( ID int identity(0,1) not null, Adr varchar(20), AdrValue int ) create table BEL ( ID int identity(0,1) not null, Adr varchar(20), KDNR varchar(10), BelValue int ) GO SET IDENTITY_INSERT ADR ON insert into ADR (ID, Adr, AdrValue) values (1, 'Bla', 0) insert into ADR (ID, Adr, AdrValue) values (2, 'Blubb', 0) SET IDENTITY_INSERT ADR OFF SET IDENTITY_INSERT BEL ON insert into BEL (ID, Adr, KDNR, BelValue) values (1, 'Bla', '', 1) insert into BEL (ID, Adr, KDNR, BelValue) values (2, 'Bla', '', 2) insert into BEL (ID, Adr, KDNR, BelValue) values (3, 'Bla', '', 3) insert into BEL (ID, Adr, KDNR, BelValue) values (4, '', 'Bla', 4) insert into BEL (ID, Adr, KDNR, BelValue) values (5, 'Blubb', '', 2) insert into BEL (ID, Adr, KDNR, BelValue) values (6, 'Blubb', '', 3) SET IDENTITY_INSERT BEL OFF GO
Code:
Egebnis:
UPDATE
ADR SET AdrValue = (select SUM(B.BelValue) as Summe from BEL B where b.Adr = ADR.Adr) Bla = 6 -> Erwartet 10 incl. KDNR = Bla Blubb = 5 |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Danke an Alle...8-)
Der Preis geht an Uwe. :cheers: Mit meiner Test DB kommt das erwartete Ergebnis raus. Meiner DB fehlt mit Sicherheit nur ein Index was die Laufzeit erklärt. Nachtrag: Das Ergebnis ist korrekt. DB: 3GB -> relevante Daten 8000 Datensätze (Update) * ohne Index (fehlende Felder): nach 5 Minuten abgebrochen * Index mit allen relevanten Feldern / einzeln oder zusammengesetzt: 22s * Index mit nur einer Bedingung (wie früher): 1s :shock: Ideen für Optimierung? |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Moin...:P
Update: sowohl mit:
Code:
als auch mit:
((B.Adr > '' and B.Adr = ADR.Adr) or
(B.Adr = '' and B.KDNR = ADR.Adr))),
Code:
...war die Geschwindigkeit langsam. (trotz aller Indizies und neu erstellt komplett 15min/8000DS) :cry:
Adr.Adr = case
when B.Adr > '' then B.Adr else B.KDNR end), Zusammengesetzte Werte aus getrennten SQL: (komplett 2s/8000DS)
Code:
Könnte das mir jemand logisch erklären? :gruebel:
UPDATE
ADR SET AdrValue = (select SUM(B.BelValue) as Summe from BEL B where B.Adr = ADR.Adr) + (select SUM(B.BelValue) as Summe from BEL B where B.KDNR = ADR.Adr) |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Beim Case muss ja für jeden Datensatz Berechnungen durchgeführt werden. Im 2. Fall kann man hingegen direkt auf die Indizes setzen.
|
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Hallöle...:P
Zitat:
|
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Was passiert denn bei
SQL-Code:
UPDATE
ADR SET AdrValue = select SUM(B.BelValue) as Summe from BEL B where IIF(B.Adr='', B.KDNR, B.Adr) = ADR.Adr |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Danke...:P
Ich muß dich aber vertrösten... Ich melde mich wenn ich das probiert habe. :wink: |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Update 1:
Zitat:
Zitat:
Update 2:
Code:
...geht plötzlich nicht mehr. :shock: Beide Subselects liefern Werte, aber das Update(AdrValue) ist NULL...:twisted:
UPDATE
ADR SET AdrValue = (select SUM(B.BelValue) as Summe from BEL B where B.Adr = ADR.Adr) + (select SUM(B.BelValue) as Summe from BEL B where B.KDNR = ADR.Adr) |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Also wenn eine der Summen NULL ist, weil keine Datensätze zum Summieren da sind, dann ist auch die Summe der Addition NULL, oder?
Also muss noch ein Coalesce, NVL, .. rein, weiß nicht was fb da genau mag. P.S: "Beide Select liefern Werte" müsste dazu allerdings im Einzelfall nicht erfüllt sein. (Während es generell, also ohne Datensatzbeschränkung, Werte liefert) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz