Hier ist das Szenario:

 ---------------
|Table A        |
|---------------|
|tba_id tba_name|
|1      Item A  |
|2      Item B  |
 ---------------
 -------------------------------------
|Table B                              |
|-------------------------------------|
|tbb_id tbb_tbaid tbb_qtyIn tbb_qtyOut|
|1      1         5         0         |
|2      2         4         0         |
|3      2         7         0         |
|4      1         0         5         |
 -------------------------------------

In Tabelle A speichere ich die Artikeldetails. In Tabelle B speichere ich die Menge in und aus Tabelle A. Ich möchte die gesamte Tabelle A mit einer Menge größer als 0 in Tabelle B über eine einzelne SQL-Abfragezeile abrufen. Das heißt, es wäre so etwas wie: Summe von qtyIn - Summe von qtyOut> 0.

sql
0
jr.prog 24 Feb. 2020 im 09:32

4 Antworten

Beste Antwort

Versuche dies:

select a.tba_name from TableA a where exists(
select * from TableB b where a.tba_id=b.tbb_tbaid group by b.tbb_tbaid having 
(sum(tbb_qtyIn)-sum(tbb_qtyOut))>0);
1
Naveen Arora 24 Feb. 2020 im 06:39

Sie können einzelne sum() verwenden:

select a.tba_id, a.tba_nam
from a inner join
     b
     on a.tba_id = b.tbaid
group by a.tba_id, a.tba_nam
having sum(b.tbb_qtyIn - b.tbb_qtyOut) > 0
0
Yogesh Sharma 24 Feb. 2020 im 09:05

Ich würde dies gerne schreiben als:

select a.tba_name
from TableA a
where (select sum(b.tbb_qtyIn) - sum(b.tbb_qtyOut)
       from TableB b
       where a.tba_id = b.tbb_tbaid
      ) > 0;

Eine skalare Unterabfrage zur Berechnung des Nettobetrags scheint nur die direkteste Lösung zu sein.

0
Gordon Linoff 24 Feb. 2020 im 12:59

Aggregation verwenden

select a.tba_name
 from tabla a join tableb b on a.tba_id=b.tbb_tbaid
group by a.tba_name
having (sum(tbb_qtyIn)-sum(tbb_qtyOut))>0
2
Zaynul Abadin Tuhin 24 Feb. 2020 im 06:34