![]() |
Datenbank: Oracle • Version: 10 • Zugriff über: BDE
SQL-Abfrage ob ein Einzelpreis NULL ist
Hallo zusammen,
ich habe eine komplexe SQL-Abfrage:
Delphi-Quellcode:
Nun würde ich gerne den ausgegebenen Datensatz, welcher bei der Berechnung der Summe einen Einzelpreis mit 0 oder NULL hatte gerne kennzeichnen.
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 Wie kann ich das SQL-technisch ermitteln ? Gruss Holger |
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:
Das gibt bei null oder 0 den Wert -1 aus, sonst 0.
select ... decode(mycolumn, 0, -1, null, -1, 0) as myColumnValueisNull ..
Werte in Anführungszeichen entsprechend für Textspalte bzw. Textausgabe. |
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? |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zitat:
NVL(e1,e2) gibt e2 zurück, wenn e1 NULL ist. |
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: |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zitat:
Somit können selbstgemachte Statistik-Funktionen
Code:
durchaus in die Hose gehen
select sum(soldprice) / count(Customer) as Durchschnitt
so geht's wieder
Code:
Gruß
select sum(soldprice) / count(Customer) as Durchschnitt
.. where soldprice is not NULL K-H |
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. |
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:
Beispiel:
SUM(NULLIF(LB.STUECK * LB.PREIS, 0)) AS PREIS_NULL
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 |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Das mit dem COUNT scheint dort genauso zu sein.
![]() 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:
(beachtet nur NULL, aber keine 0)
COUNT(LB.STUECK) + COUNT(LB.PREIS) <> COUNT(*) * 2 AS PREIS_NULL
|
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. |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zitat:
Ich dachte, dass soll in einer extra Spalte geflagt werden. |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Wie kann ich das jetzt in mein Select-Statement einbauen ?
|
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
jobo -> Das ist schon richtig. Nur müsste bei der NULLIF - Geschichte doch NULL oder 0 rauskommen, wenn beide das selbe Ergebnis liefern kann ich damit ja ncihts anfangen, oder mache ich was falsch ?
|
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Auch wenn das jetzt zu trivial klingt, aber so wie ich dich verstehe möchtest du das hier:
SQL-Code:
PREISISTNULL liefert nun für 0 und NULL eine 1, ansonsten eine 0.
SELECT ....
, SUM(LB.STUECK * LB.PREIS) AS PREIS , DECODE(LB.Preis, NULL, 1, 0, 1 , 0) AS PREISISTNULL .... |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
baumina -> Das würde gehen wenn es sich nicht um SUMME der Einzelpreise handeln würde.
Hier haben wir aber eine Gruppierung von Preisen. Nun will ich aus den einzelnen Gruppierungen herrausfinden in welcher der Gruppierung sich bei den Einzelpreisen NULL-Werte befunden haben. Hat noch wer eine Idee, oder bin ich etwa auf dem Holzweg ... |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zitat:
Code:
Aber ich vermute stark, daß Du genau das nicht willst.
select * from ...where preis is null
Versuch doch mal zu beschreiben was Du erreichen willst. Gruß K-H |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Ah, so langsam verstehe ich. Dann fällt mir eigentlich nur noch ein, dass du ein subselect machst a la:
SQL-Code:
Select .....,
(Select Count(*) FROM SYSSIGMA2GML.LAGERBESTANDSBUCHUNG XX where ((LB.[ID] = XX.ID) and ((XX.Preis is null) or (XX.Preis = 0))) AS ANZNULLPREISE |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zitat:
|
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Mit einer Unterabfrage habe ich aber dann ja keinen GROUPBY-Ausdruck mehr, aber genau sowas suche ich. Muss nur irgendwie anders gelöst werden.
Da ich ja in die Hauptabfrage nicht die ID mit reinbringen kann, da er mir dann ja die Daten nicht mehr gruppieren würde. Was gibt es noch ? |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Sir Rufo -> DAS IST DIE LÖSUNG. DANKE !!!
Hier noch erweitert für NULL, 0 und 1:
Delphi-Quellcode:
SUM(DECODE(LB.PREIS, NULL, 1, 0, 1 , 0)) AS PREIS_0,
SUM(DECODE(LB.PREIS, NULL, 1, 1, 1 , 0)) AS PREIS_1, SUM(DECODE(LB.PREIS, NULL, 1, NULL, 1 , 0)) AS PREIS_NULL |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zitat:
|
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zusammen sind wir stark ! :thumb:
|
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Vielen dank an Euch alle.
Gruss Holger |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Zitat:
SUM(DECODE(LB.PREIS, NULL, 1, 0)) AS PREIS_NULL |
AW: SQL-Abfrage ob ein Einzelpreis NULL ist
Wer hats gemacht? Die Schweizer..
Also das Decode habe ich im #2 geschrieben, nur mit -1, dass es in einem Group statement mit aggregiert werden muss, sollte eigentlich klar sein, oder? :) Aber da will ich nicht drauf rumreiten, sondern anmerken, dass die Aggregatform mit SUM fragwürdig oder unsicher ist. Besonders wenn ich mich bei ein paar Beispieldaten drauf einschieße, dass da immer 0 oder 1 rauskommt. Es könnte auch mehr werden, ein min/max wäre also vielleicht die bessere Wahl, jenachdem was man braucht, Hauptsache, man weiß, was man tut. @Jumpy: Ja |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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