2017-07-04 4 views
0

Ich habe folgende SQL-Abfrage.Sql bedingte Summe Berechnung auf andere Spalte Wert überprüfen

SELECT (SELECT ISNULL(SUM(Qty),0) 
From Bills 
JOIN BillMaster on Bills.BillNumber = BillMaster.BillNumber 
where SessionID = '" + DBHandler.SessionID(Date) + "' 
and BillMaster.ShiftID = " + SHiftID + " 
and Bills.ProductID = products.id) [qty], 
products.price , products.name 
FROM products. 

In "Rechnungen" -Tabelle gibt es Spalte "IsDeal". Ich möchte, dass diese Summe wird nur ausgeführt, wenn "isDeal" = 0 Ich angehängt Rechnungen Tabelle Screenshot, in denen es ersichtlich ist, dass es Spalte "isDeal" enter image description here ist und ich bin Ausgang Bericht anhängen, wo ich will, wenn IsDeal = 0 dann Summe wird berechnen andere weise Summe sollte nicht berechnet enter image description here also wie kann ich das berechnen?

+0

Verwenden Sie eine 'WHERE'-Klausel? –

+0

Bitte aktualisieren Sie Ihre Frage und zeigen Sie uns Beispiel Eingabe- und Ausgabedaten. –

+0

Ich habe meine Frage aktualisiert, bitte sehen Sie die aktualisierte Frage @TimBiegeleisen –

Antwort

0

versuchen Sie dies:

SELECT 
    isnull((
    SELECT SUM(Qty) 
    From Bills 
    inner JOIN BillMaster on Bills.BillNumber = BillMaster.BillNumber 
    where SessionID = '" + DBHandler.SessionID(Date) + "' 
    and BillMaster.ShiftID = " + SHiftID + " 
    and Bills.ProductID = products.id and isdeal=0 
    ), 0) [qty], 
products.price , products.name 
FROM products 
+0

danke @ Esperento57 diese Methode für mich gearbeitet –

0

Bitte verwenden Sie folgende Abfrage:

SELECT (SELECT ISNULL(SUM(
CASE 
    WHEN IsDeal =0 THEN Qty 
    ELSE 0 
END,0) 
),0) 
From Bills 
JOIN BillMaster on Bills.BillNumber = BillMaster.BillNumber 
where SessionID = '" + DBHandler.SessionID(Date) + "' 
and BillMaster.ShiftID = " + SHiftID + " 
and Bills.ProductID = products.id) [qty], 
products.price , products.name 
FROM products 
+0

Es gibt immer noch einen Fehler. es ist nicht die Ergebnisse in meiner C# Desktop-Anwendung richtig abrufen –

+0

Fehler ist "die ISNULL-Funktion erfordert 2 Argumente" –

+0

SQL für isnull Funktion aktualisiert –

0

andere Methode:

SELECT ISNULL(f2.Qty, 0) qty, f1.price , f1.name 
FROM products f1 
outer apply 
(select SUM(Qty) qty 
    From Bills 
    inner JOIN BillMaster on Bills.BillNumber = BillMaster.BillNumber 
    where SessionID = '" + DBHandler.SessionID(Date) + "' 
    and BillMaster.ShiftID = " + SHiftID + " 
    and Bills.ProductID = f1.id and IsDeal =0 
) f2 
0

Verwendung bedingte Aggregation auf isDeal:

SELECT 
    (SELECT ISNULL(SUM(CASE WHEN isDeal = 0 THEN Qty ELSE 0 END), 0) 
    FROM Bills t1 
    INNER JOIN BillMaster t2 
     ON t1.BillNumber = t2.BillNumber 
    WHERE SessionID = '" + DBHandler.SessionID(Date) + "' AND 
      t2.ShiftID = " + SHiftID + " AND 
      t1.ProductID = products.id 
    ) [qty], 
    products.price, 
    products.name 
FROM products