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-Abfrage ob ein Einzelpreis NULL ist (https://www.delphipraxis.net/180597-sql-abfrage-ob-ein-einzelpreis-null-ist.html)

HolgerCW 2. Jun 2014 10:47

Datenbank: Oracle • Version: 10 • Zugriff über: BDE

SQL-Abfrage ob ein Einzelpreis NULL ist
 
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 = '1' AND 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

jobo 2. Jun 2014 10:57

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
Bei einem Number Typ der Basisspalte könntest Du so eine berechnete Spalte per decode ausgeben:
SQL-Code:
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.

himitsu 2. Jun 2014 11:05

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
Oder so
SQL-Code:
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?

jobo 2. Jun 2014 11:31

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
Zitat:

Zitat von himitsu (Beitrag 1261005)
Oder so
SQL-Code:
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.

himitsu 2. Jun 2014 11:54

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
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. :angel:

p80286 2. Jun 2014 12:27

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
Zitat:

Zitat von himitsu (Beitrag 1261005)
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

himitsu 2. Jun 2014 12:34

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
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.

HolgerCW 2. Jun 2014 12:36

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
Hallo zusammen,

dank schon einmal für die Hilfe.

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

Delphi-Quellcode:
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

himitsu 2. Jun 2014 12:48

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
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?
SQL-Code:
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
SQL-Code:
COUNT(LB.STUECK) + COUNT(LB.PREIS) <> COUNT(*) * 2 AS PREIS_NULL
(beachtet nur NULL, aber keine 0)

jobo 2. Jun 2014 12:49

AW: SQL-Abfrage ob ein Einzelpreis NULL ist
 
@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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 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