Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SQL Abfrage zusammenfassen? (https://www.delphipraxis.net/74565-sql-abfrage-zusammenfassen.html)

polondo 5. Aug 2006 10:00


SQL Abfrage zusammenfassen?
 
hi leute,

Ich habe da 2 Abfragen, die ich gerne zusammenfassen möchte.

So sehen die ursprünglichen Abfragen aus:

SQL-Code:
SELECT SUM(productbookingpos.quantity) AS InUpToNow FROM productbookingpos
WHERE productbookingpos.prod_ID = 111
AND productbookingpos.invalid =0;

SELECT SUM(invoicepos.quantity) AS OutUpToNow FROM invoicepos
WHERE invoicepos.prod_ID = 111
AND invoicepos.invalid =0;
Die obere Abfrage liefert mir zu einer gegebenen product_id alle Produkt-Eingänge und die Untere alle Produkt-Abgänge.

Diese werden später in meinem Programm voneinander angezogen, sodass ich dann den Lagerbestand habe. Die Frage ist nur ob es möglich ist diese Differenz DIREKT in einer einzigen Abfrage zu berechnen .. und wenn ja wie geht das?

Danke schonmal!
mfg R.

TBx 5. Aug 2006 10:19

Re: SQL Abfrage zusammenfassen?
 
Hallo Polondo!

Was für ein DB-System nutzt DU?

Theoretisch ist eine Zusammenfassung der beiden SQL-Statements möglich, wenn das verwendete DB-System SubSelects unterstützt.

In der Praxis würde ich hier allerdings eher auf eine Stored Procedure zurückgreifen.

Gruß

onlinekater

mkinzler 5. Aug 2006 10:22

Re: SQL Abfrage zusammenfassen?
 
Du könntest sie zusammenjoinen:

SQL-Code:
SELECT
    SUM(productbookingpos.quantity) AS InUpToNow, SUM(invoicepos.quantity) AS OutUpToNow
FROM
    productbookingpos, invoicepos
WHERE
    productbookingpos.prod_ID = 111 and invoicepos.prod_ID= productbookingpos.prod_ID
    AND productbookingpos.invalid =0 AND invoicepos.invalid =0;

polondo 5. Aug 2006 10:34

Re: SQL Abfrage zusammenfassen?
 
erstmal danke für die antworten!!

ich nutze den sqlserver 2000

@mkinzler genau das habe ich bereits probiert. allerdings liefert er mir einen falschen wert für meinen wareneingang. ich habe nicht herausgefunden woran das liegt?! führe ich die abfragen getrennt aus bekomme ich richtige werte.

alzaimar 5. Aug 2006 10:49

Re: SQL Abfrage zusammenfassen?
 
Der Fehler dürfte darin liegen, das bei der Abfrage mehr Daten ausgefiltert werden.
So gehts aber (vermutlich)
SQL-Code:
SELECT
    SUM(case when p.invalid = 0 then p.quantity else 0 end) AS InUpToNow,
    SUM(case when i.invalid = 0 then i.quantity else 0 end) AS OutUpToNow
FROM
    productbookingpos p join invoicepos i on p.prod_ID = i.prodID
WHERE
    p.prod_ID = 111
oder so (ist hässlich, aber syntaktisch korrekt):
SQL-Code:
select
  (SELECT SUM(productbookingpos.quantity) FROM productbookingpos
    WHERE productbookingpos.prod_ID = 111
          AND productbookingpos.invalid =0) AS InUpToNow ,

  (SELECT SUM(invoicepos.quantity) FROM invoicepos
    WHERE invoicepos.prod_ID = 111
          AND invoicepos.invalid =0) AS OutUpToNow

polondo 5. Aug 2006 10:52

Re: SQL Abfrage zusammenfassen?
 
wow danke für die hilfe ;O)
funktioniert und bringt beide werte richtig aus der db.

mfg R.

polondo 5. Aug 2006 18:30

Re: SQL Abfrage zusammenfassen?
 
Jetzt mal ne andere Frage:

Kann man eigentlich diese Teil-Abfragen hier auch direkt voneinander abziehen und als Result ausgeben?

SQL-Code:
select
  (SELECT SUM(productbookingpos.quantity) FROM productbookingpos
    WHERE productbookingpos.prod_ID = 111
          AND productbookingpos.invalid =0) AS InUpToNow,

  (SELECT SUM(invoicepos.quantity) FROM invoicepos
    WHERE invoicepos.prod_ID = 111
          AND invoicepos.invalid =0) AS OutUpToNow
Ich habe schon versucht beides in eine Select zu packen und die summe der differenz sozusagen zu bilden .. hat aber nicht funktioniert.
Weiß einer hierbei weiter?

mfg R.

TBx 5. Aug 2006 19:42

Re: SQL Abfrage zusammenfassen?
 
sollte so funktionieren:

SQL-Code:
select
  ((SELECT SUM(productbookingpos.quantity) FROM productbookingpos
    WHERE productbookingpos.prod_ID = 111 
          AND productbookingpos.invalid =0)
  -(SELECT SUM(invoicepos.quantity) FROM invoicepos
    WHERE invoicepos.prod_ID = 111 
          AND invoicepos.invalid =0)) AS ERGEBNIS
Hope it helps

onlinekater

polondo 5. Aug 2006 20:00

Re: SQL Abfrage zusammenfassen?
 
ja super funktioniert. Ich hatte vorhin die beiden AS nicht rausgenommen deswegen hat es wohl nicht funktioniert. Dank Dir!!

mfg R.


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