AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL: Update mit Select und IF/CASE in der Bedingung
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von haentschman · begonnen am 8. Jun 2020 · letzter Beitrag vom 18. Jun 2020
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 8. Jun 2020, 08:43
Datenbank: MSSQL • Version: 2012 • Zugriff über: FireDac
Moin...

Ich glaube ich muß mir helfen lassen...

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

Danke für Infos...

PS:
Ich hasse solche Verrenkungen...

Geändert von haentschman ( 8. Jun 2020 um 09:02 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 8. Jun 2020, 08:53
Schreib doch zu den Felder Aliase dazu, damit man weiß welche Felder aus welcher Tabelle sind.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 8. Jun 2020, 08:54
OK...
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 8. Jun 2020, 09:15
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.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 8. Jun 2020, 09:32
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
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 8. Jun 2020, 09:42
Reicht da nicht ein OR?

SQL-Code:
update
  ADR
set
  Value = (select SUM(B.Brutto) as Summe from BEL B
             where
               (B.Art = 'BLUBBor B.Art = 'BLA') and
               ( (B.Adr > 'and B.Adr = ADR.Adr) or
                 (B.KDNR = ADR.Adr)
               )
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 8. Jun 2020, 09:46
Was spricht denn gegen das hier?
SQL-Code:
(select SUM(B.Brutto) as Summe from BEL B
             where
               (B.Art = 'BLUBBor 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
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 8. Jun 2020, 09:48
Reicht da nicht ein OR?

SQL-Code:
update
  ADR
set
  Value = (select SUM(B.Brutto) as Summe from BEL B
             where
               (B.Art = 'BLUBBor B.Art = 'BLA') and
               ( (B.Adr > 'and B.Adr = ADR.Adr) or
                 (B.KDNR = ADR.Adr)
               )
Das würde auch diese Fälle auswerfen:  (B.Adr > 'and B.Adr <> ADR.Adr) and (B.KDNR = ADR.Adr)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 8. Jun 2020, 09:49
Zitat:
Reicht da nicht ein OR?
...leider nicht. 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

Geändert von haentschman ( 8. Jun 2020 um 10:05 Uhr)
  Mit Zitat antworten Zitat
RSF

Registriert seit: 13. Mär 2008
153 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

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

  Alt 8. Jun 2020, 09:56
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);
Ronald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.
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