AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Abfrage ob ein Einzelpreis NULL ist
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage ob ein Einzelpreis NULL ist

Ein Thema von HolgerCW · begonnen am 2. Jun 2014 · letzter Beitrag vom 2. Jun 2014
Antwort Antwort
Seite 1 von 3  1 23      
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 10:47
Datenbank: Oracle • Version: 10 • Zugriff über: BDE
Hallo zusammen,

ich habe eine komplexe SQL-Abfrage:

Delphi-Quellcode:
SELECT DISTINCT LB.PROJEKTNUMMER, LB.BUCHUNGSART_ID, BA.BUCHUNGSART, BA.PLUSMINUS, BA.FIRMA, LB.BEARBEITUNG, LB.LIEFERSCHEINNR,
SUM(LB.STUECK * LB.PREIS) AS PREIS
FROM SYSSIGMA2GML.LAGERBESTANDSBUCHUNG LB
LEFT JOIN SYSSIGMA2GML.BUCHUNGSART BA
ON LB.BUCHUNGSART_ID = BA.ID
LEFT JOIN SYSSIGMA2GML.LAGERSTAMM LS
ON LB.LAGERNUMMER = LS.LAGERNUMMER
LEFT JOIN SYSFORM.KOBUSYS_SAPMATERIAL SAP
ON LB.MATERIALNUMMER = SAP.MATERIALNUMMER
LEFT JOIN SYSFORM.KOBUSYS_VERBRAUCHSMATERIAL VER
ON LB.MATERIALNUMMER = VER.MATERIALNUMMER
WHERE LB.ID IS NOT NULL AND LS.HAUPTLAGERKENNZEICHEN = '1AND LB.SAP_UEBERGABE IS NULL AND TRANSLATE(LB.MATERIALNUMMER,' 0123456789', '#') is null
GROUP BY LB.PROJEKTNUMMER, LB.BUCHUNGSART_ID, BA.BUCHUNGSART, BA.PLUSMINUS, BA.FIRMA, LB.BEARBEITUNG, LB.LIEFERSCHEINNR
HAVING 1 = 1
ORDER BY LB.PROJEKTNUMMER
Nun würde ich gerne den ausgegebenen Datensatz, welcher bei der Berechnung der Summe einen Einzelpreis mit 0 oder NULL hatte gerne kennzeichnen.

Wie kann ich das SQL-technisch ermitteln ?

Gruss

Holger
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 10:57
Bei einem Number Typ der Basisspalte könntest Du so eine berechnete Spalte per decode ausgeben:
select ... decode(mycolumn, 0, -1, null, -1, 0) as myColumnValueisNull .. Das gibt bei null oder 0 den Wert -1 aus, sonst 0.
Werte in Anführungszeichen entsprechend für Textspalte bzw. Textausgabe.
Gruß, Jo

Geändert von jobo ( 2. Jun 2014 um 11:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 11:05
Oder so
SUM(NULLIF(LB.STUECK * LB.PREIS, 0)) IS NULL AS HierGabEsEinNullDrin

NULLIF macht aus einer 0 ein NULL, die NULL bleiben NULL
und SUM gibt doch auch NULL zurück, sobald einer der Werte NULL war?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 11:31
Oder so
SUM(NULLIF(LB.STUECK * LB.PREIS, 0)) IS NULL AS HierGabEsEinNullDrin

NULLIF macht aus einer 0 ein NULL, die NULL bleiben NULL
und SUM gibt doch auch NULL zurück, sobald einer der Werte NULL war?
NULLIF(e1, e2) gibt NULL zurück, wenn beide Werte gleich sind, sonst den e1.
NVL(e1,e2) gibt e2 zurück, wenn e1 NULL ist.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#5

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 11:54
Jupp, das NULLIF gibt somit immer NULL zurück, sobald im ersten Parameter eine 0 oder NULL drin sind, ansonsten den Wert dieses Parameters, da der zweite Parameter ja 0 ist.

Und wenn das SUM nun auch noch NULL liefert, sobald einer der Werte NULL ist, dann liefert IS NULL ein True und somit entspricht das dann der gewünschten Funktion.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 12:27
und SUM gibt doch auch NULL zurück, sobald einer der Werte NULL war?
Soweit ich weiß werden NULL-Werte ignoriert.

Somit können selbstgemachte Statistik-Funktionen
Code:
select sum(soldprice) / count(Customer) as Durchschnitt
durchaus in die Hose gehen

so geht's wieder
Code:
select sum(soldprice) / count(Customer) as Durchschnitt
..
where soldprice is not NULL
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#7

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 12:34
Im Postgres weiß ich das Verhalten aktuell nur vom COUNT.
count(Feld) zählt nur Datensätze, wo das Feld nicht NULL ist, während count(*) alle Datensätze zählt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#8

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 12:36
Hallo zusammen,

dank schon einmal für die Hilfe.

Nur leider klappt das nicht, wenn ich dies in das SQL einbaue:

SUM(NULLIF(LB.STUECK * LB.PREIS, 0)) AS PREIS_NULL Beispiel:

STUECK PREIS
1 2€
2 0€

Ergebnis aus SUM(LB.STUECK * LB.PREIS) = 2€

Ergebnis aus SUM(NULLIF(LB.STUECK * LB.PREIS, 0)) AS PREIS_NULL auch 2€

Was für Möglichkeiten habe ich noch ?

Gruss

Holger
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#9

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 12:48
Das mit dem COUNT scheint dort genauso zu sein.
http://www.teialehrbuch.de/Kostenlos...unktionen.html

Im Grunde bräuchte man irgendeine Aggregatfunktion, welche NULL liefert, sobald ein NULL in den werten vorkommt.

Funktioniert sowas?
COUNT(NULLIF(LB.STUECK * LB.PREIS, 0)) <> COUNT(*) AS PREIS_NULL
Das zweite COUNT zählt alle Datensätze und das erste COUNT zählt alles ohne NULL/0.

oder
COUNT(LB.STUECK) + COUNT(LB.PREIS) <> COUNT(*) * 2 AS PREIS_NULL (beachtet nur NULL, aber keine 0)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jun 2014 um 12:52 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: SQL-Abfrage ob ein Einzelpreis NULL ist

  Alt 2. Jun 2014, 12:49
@p80286: Nein, das geht. NULL wird nicht ignoriert, es ist nur undefiniert.
Undefiniert * irgendwas = ebenfalls undefiniert, also NULL.

In die Hose geht das nur, wenn man NULL zu 0 macht und dadurch teilt.
Gruß, Jo

Geändert von jobo ( 2. Jun 2014 um 12:51 Uhr) Grund: wg keine rote box
  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 14:57 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