2017-07-04 12 views
0

私は次のSQLクエリがあります。他の列の値のチェックでSql条件付き合計計算

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. 

"請求書"の表には "isDeal"という列があります。私はその合計が "isDeal" = 0のときにのみ実行されることを望む カラム "isDeal"があることがわかるBillsテーブルのスクリーンショットenter image description here と出力レポートを添付しています。isDeal = 0 then sum計算するべきでない他の賢明な合計を計算する enter image description here これをどのように計算できますか?

+0

'WHERE'節を使用しますか? –

+0

あなたの質問を更新し、サンプルの入力と出力のデータを表示してください。 –

+0

私の質問が更新されました。更新された質問@TimBiegeleisen –

答えて

0

はこれを試してみてください。

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

このメソッドは私のために働いてくれました –

0

クエリの下に使用してください:

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

を参照してください。まだエラーが発生しています。それは私のC#デスクトップアプリケーションで正しく結果をフェッチしていません –

+0

エラーは "ISNULL関数は2つの引数を必要とします" –

+0

Sqlはisnull関数のために更新されました –

0

他の方法:

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

使用条件集約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 
関連する問題