![]() |
Datenbank: MSSQL • Version: 2012 • Zugriff über: FireDac
SQL: Update mit Select und IF/CASE in der Bedingung
Moin...:P
Ich glaube ich muß mir helfen lassen...:oops: Was soll passieren: Eine Spalte in ADR (Tabelle) soll mit der Summe aus den BEL (Tabelle) geupdatet werden. So weit so gut.
Code:
Erklärung:
update
ADR set Value = (select SUM(B.Brutto) as Summe from BEL B where (B.Art = 'BLUBB' or B.Art = 'BLA') and B.Adr = ADR.Adr ADR.Adr -> nie leer! B.Adr -> kann leer sein. In diesem Falle wäre das Kriterium B.KDNR. Problem: Die "leeren" Datensätze werden nicht im Update berücksichtigt. Versuch mit IF (falsch, zeigt aber was ich denke...andere Bedingung):
Code:
Ich habe schon mit CASE experimentiert...ohne Erfolg :oops:
update
ADR set Value = (select SUM(B.Brutto) as Summe from BEL B where (B.Art = 'BLUBB' or B.Art = 'BLA') and IF (B.Adr > '') B.Adr = ADR.Adr ELSE B.KDNR = ADR.Adr Danke für Infos...:wink: PS: Ich hasse solche Verrenkungen... |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Schreib doch zu den Felder Aliase dazu, damit man weiß welche Felder aus welcher Tabelle sind.
|
AW: SQL: Update mit Select und IF/CASE in der Bedingung
OK...:wink:
|
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Moin,
kannst Du ein COALESCE um das SUM machen? Dann bekommst bei nicht vorhandenen Datensätzen die ZIffer 0 zurück und kein NULL und damit sollte der UPDATE erfolgen. |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Danke...
Zitat:
Summe aus: 1. B.Adr = ADR.Adr + 2. B.KDNR = ADR.Adr |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Reicht da nicht ein OR?
SQL-Code:
update
ADR set Value = (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.KDNR = ADR.Adr) ) |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Was spricht denn gegen das hier?
SQL-Code:
(select SUM(B.Brutto) as Summe from BEL B
where (B.Art = 'BLUBB' or B.Art = 'BLA') and ((B.Adr IS NOT NULL and B.Adr = ADR.Adr) or (B.Adr IS NULL and B.KDNR = ADR.Adr)) |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Zitat:
SQL-Code:
(B.Adr > '' and B.Adr <> ADR.Adr) and (B.KDNR = ADR.Adr)
|
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Zitat:
Code:
Da fehlen auch die Datensätze mit B.Adr = ''
(select SUM(B.Brutto) as Summe from BEL B
where (B.Art = 'BLUBB' or B.Art = 'BLA') and ((B.Adr IS NOT NULL and B.Adr = ADR.Adr) or (B.Adr IS NULL and B.KDNR = ADR.Adr)) PS: Das B.Adr ist nicht NULL sondern '' Test: Versuch des Zusammenrechnens zweier Subselects (getrennte Bedingungen) zu einem Wert...da kommt was ganz komisches raus. Zahlen mit Original SQL: B.Brutto = 1058373,92, 3 Datensätze mit (B.Adr = '') = 1156,01 ADR.SUMME = 1057217,91 |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Ich hoffe das Problem verstanden zu haben: Null Werte gehen nicht.
Die Null-Felder müssen vor Berechnungen erst auf einen definierten Wert gebracht werden z.B.
Code:
NULLIF(( Select SUM(Brutto) From Artikel Where(ID_Nr=did_jumbo)),0);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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