Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Update mit Select und IF/CASE in der Bedingung (https://www.delphipraxis.net/204572-sql-update-mit-select-und-if-case-der-bedingung.html)

haentschman 8. Jun 2020 07:43

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:
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
Erklärung:
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:
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
Ich habe schon mit CASE experimentiert...ohne Erfolg :oops:

Danke für Infos...:wink:

PS:
Ich hasse solche Verrenkungen...

TigerLilly 8. Jun 2020 07:53

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.

haentschman 8. Jun 2020 07:54

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
OK...:wink:

rokli 8. Jun 2020 08:15

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.

haentschman 8. Jun 2020 08:32

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Danke...
Zitat:

Dann bekommst bei nicht vorhandenen Datensätzen
Die Datensätze sind ja vorhanden, nur das Kriterium für das Update (Zuordnung der Summe zu ADR.Adr) wäre bei diesen Datensätzen ein anderes. Ich möchte alle Datensätze des Subselects mit der Bedingung:
Summe aus:
1. B.Adr = ADR.Adr
+
2. B.KDNR = ADR.Adr

dataspider 8. Jun 2020 08:42

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)
               )

Uwe Raabe 8. Jun 2020 08:46

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))

Uwe Raabe 8. Jun 2020 08:48

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Zitat:

Zitat von dataspider (Beitrag 1466698)
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)
               )

Das würde auch diese Fälle auswerfen:
SQL-Code:
  (B.Adr > '' and B.Adr <> ADR.Adr) and (B.KDNR = ADR.Adr)

haentschman 8. Jun 2020 08:49

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Zitat:

Reicht da nicht ein OR?
...leider nicht. :cry: Mit OR kommt etwa in der Summe das Doppelte raus. :?
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))
Da fehlen auch die Datensätze mit B.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

RSF 8. Jun 2020 08:56

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 14:06 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz