2016-04-12 6 views
1

Ich habe eine Tabelle mit Transaktion, die ein Feld für die Menge und ein anderes Feld haben, um anzuzeigen, ob es ein Kauf oder Verkauf ist, für den jeweiligen Artikel.Aggregat auf dem Tisch aber muss 0 Werte überspringen

Ich versuche, eine Gesamtabfrage zu schreiben, die mir eine Summe der einzelnen Elemente gibt.

Meine Tabelle sieht wie folgt aus:

ID Item  Qty Buy_sell price 
1  item1 5  1   2.5 
2  item1 4  0   3.2 
3  item2 8  1   155.25 
4  item3 179 1   89.75 
5  item1 18  1   3.1 
4  item3 179 0   93.25 

Und meine Abfrage sieht wie folgt aus:

Select 
    Item, 
    sum(case when Buy_sell=1 then Qty when Buy_sell=0 then Qty*-1 else 0 end) as Balance 
from Table1 
group by Item 
order by Item 

So weit so gut.

Ausgang:

Item  Balance 
Item1 19 
Item2 8 
Item3 0 

I Reihen vermeiden möchten, wo Summe ist 0. Ich habe dies auf SQL Server CE mache.

Antwort

3

Sie haben in der HAVING Klausel eine Bedingung stellen:

Select Item, sum(case 
        when Buy_sell=1 then Qty 
        when Buy_sell=0 then Qty*-1 
        else 0 
      end) as Balance 
from Table1 
group by Item 
having sum(case 
       when Buy_sell=1 then Qty 
       when Buy_sell=0 then Qty*-1 
       else 0 
      end) <> 0 
order by Item 
+0

super ... danke !!!! – user3129015

0

Um Tipparbeit zu sparen, tun das case Teil in einer abgeleiteten Tabelle:

select Item, sum(Balance) as Balance 
from 
(
    select Item, case 
        when Buy_sell=1 then Qty 
        when Buy_sell=0 then Qty*-1 
        else 0 
       end as Balance 
    from Table1 
) dt 
group by Item 
having sum(balance) <> 0 
order by Item 

(Wird auch das Risiko, reduzieren Tippfehler ...)

+0

vereinbart! Danke für das Teilen !!! – user3129015

Verwandte Themen