Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL : select mit Fallabfrage (https://www.delphipraxis.net/175440-sql-select-mit-fallabfrage.html)

baumina 21. Jun 2013 10:10

Datenbank: mysql • Version: 5.5 • Zugriff über: UniDAC

SQL : select mit Fallabfrage
 
Ich habe folgende SQL-Abfrage:

Code:
SELECT (coalesce(sum(sl.Anzahl),0) -
        coalesce((SELECT sum(lesl.Anzahl)
          FROM TBLLESL lesl
         WHERE sl.plmartid=lesl.plmartid
           AND au.auid=lesl.auid
         GROUP BY lesl.PLMARTID),0)) AnzFehlt
FROM TBLAUPLM au
LEFT JOIN TBLPLMAUSL sl
       ON au.plmauid=sl.plmauid
WHERE sl.BuchTyp is NULL
  AND au.auid=:AUID
  AND sl.PLMARTID=:PLMARTID
GROUP BY sl.PLMARTID
Zusätzlich brauche ich : AnzFehlt muss 0 werden, wenn AnzFehlt < 0 ist.

Kann ich denn ein IF verwenden ohne den lesl-select 2mal machen zu müssen? Oder wie mach ich das am Besten? *schlauch*

Sir Rufo 21. Jun 2013 10:25

AW: SQL : brauche Hilfe bei Abfrage
 
Schreib dir eine STORED FUNCTION die 2 Parameter entgegennimmt und von beiden den Höchstwert zurück liefert ;)

baumina 21. Jun 2013 10:49

AW: SQL : brauche Hilfe bei Abfrage
 
OK, das hab ich noch nie gemacht. Muss mich da erst mal reinlesen. Aber nur zu meinem Verständis: wenn ich eine solche stored function schreibe und die dann in meinen select-Befehl einbaue, muss ich dann den lesl-select nicht auch 2mal aufrufen?

EDIT: ach ne, habs glaub kapiert. Dann les ich mich mal in die stored functions ... danke nochmal, schönes Wochenende.

nochmal EDIT: wäre das nicht das selbe wie GREATEST und ich müsste den lesl-select aber auch 2mal ausrühren? Ich bin wochenendreif und gebs für heute auf.

jobo 21. Jun 2013 10:49

AW: SQL : brauche Hilfe bei Abfrage
 
Die Funktion gibt es schon.
http://dev.mysql.com/doc/refman/5.0/...ction_greatest
Du kannst ja die Selects verschachteln, der eine Parameter der greatest Funktion wäre einfach die 0.

baumina 21. Jun 2013 11:00

AW: SQL : brauche Hilfe bei Abfrage
 
Ja danke, ich werds am Montag mit GREATEST versuchen, indem ich folgende 2 Werte mitgeb:
1. 0
2. den select

das müsst doch klappen.

Sir Rufo 21. Jun 2013 11:03

AW: SQL : brauche Hilfe bei Abfrage
 
Zitat:

Zitat von jobo (Beitrag 1219333)
Die Funktion gibt es schon.
http://dev.mysql.com/doc/refman/5.0/...ction_greatest
Du kannst ja die Selects verschachteln, der eine Parameter der greatest Funktion wäre einfach die 0.

Irgendwie war mir auch so, aber ... ich war wohl blind :)
Zitat:

Zitat von baumina (Beitrag 1219332)
... ich müsste den lesl-select aber auch 2mal ausrühren?

Nein, der SELECT wird nicht mehrfach ausgeführt, denn es werden die Werte übergeben.

SQL-Code:
SELECT GREATEST( 0,
         (coalesce(sum(sl.Anzahl),0) -
          coalesce((SELECT sum(lesl.Anzahl)
                      FROM TBLLESL lesl
                     WHERE sl.plmartid=lesl.plmartid
                       AND au.auid=lesl.auid
                  GROUP BY lesl.PLMARTID),0))
       ) AnzFehlt
FROM TBLAUPLM au
LEFT JOIN TBLPLMAUSL sl
       ON au.plmauid=sl.plmauid
WHERE sl.BuchTyp is NULL
  AND au.auid=:AUID
  AND sl.PLMARTID=:PLMARTID
GROUP BY sl.PLMARTID

jobo 21. Jun 2013 11:09

AW: SQL : brauche Hilfe bei Abfrage
 
Zitat:

Zitat von Sir Rufo (Beitrag 1219340)
ich war wohl blind :)

Ein Wunder!!
;)

Und ja, gemeint war, Du >kannst< Selects verschachteln, >musste< aber hier nicht.

Sir Rufo 21. Jun 2013 11:36

AW: SQL : brauche Hilfe bei Abfrage
 
Zitat:

Zitat von jobo (Beitrag 1219342)
Zitat:

Zitat von Sir Rufo (Beitrag 1219340)
ich war wohl blind :)

Ein Wunder!!
;)

Und ja, gemeint war, Du >kannst< Selects verschachteln, >musste< aber hier nicht.

Ich bin wohl auch wochenendreif ;)

Meinen Beitrag habe ich editiert, damit der Bezug klarer wird ;)

sx2008 21. Jun 2013 17:26

AW: SQL : select mit Fallabfrage
 
Die Unterabfrage ist nicht sauber:
SQL-Code:
SELECT sum(lesl.Anzahl)
                      FROM TBLLESL lesl
                     WHERE sl.plmartid=lesl.plmartid
                       AND au.auid=lesl.auid
                  GROUP BY lesl.PLMARTID)
Durch das GROUP BY können potentiell mehrere Datensätze entstehen.
Wegen der Verwendung als Unterabfrage ist aber hier nur ein Datensatz erlaubt.
Die GROUP BY Klausel muss da weg.

baumina 21. Jun 2013 20:37

AW: SQL : select mit Fallabfrage
 
Zitat:

Zitat von sx2008 (Beitrag 1219410)
Durch das GROUP BY können potentiell mehrere Datensätze entstehen.
Wegen der Verwendung als Unterabfrage ist aber hier nur ein Datensatz erlaubt.
Die GROUP BY Klausel muss da weg.

Das versteh ich jetzt aber echt nicht. Wie soll ich denn sonst an meine Sum(Anzahl) kommen wenn nicht über GROUP BY?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.
Seite 1 von 2  1 2      

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