2015-12-21 54 views
3

我有兩個表。其中有FK_stockFK_orderNo使用加入信息計數

一個表中的記錄orderstock我想算的訂單存量每個項目都有數。下面的代碼工作正確地做到這一點:

(1) 
    SELECT orderstock.FK_orderNo, Count(orderstock.FK_stock) AS CountOfFK_stock 
    FROM stock INNER JOIN orderstock ON stock.StockID = orderstock.FK_stock 
    GROUP BY orderdemo.FK_orderNo 

不過,我想添加到這個使得只有庫存產品作爲非易腐(stock.perishable = 0)上市。所以像

SELECT orderstock.FK_orderNo, Count(orderstock.FK_stock) AS CountOfFK_stock 
FROM stock INNER JOIN orderstock ON stock.stockID = orderstock.FK_stock 
WHERE stock.perishable=0 
GROUP BY orderstock.FK_orderNo 

如何獲取有關FK_stock的信息,使其工作?當我試圖將庫存表中的信息結合到這一端時,每個庫存項目都被分開計算。

從結果(1)

FK_OrderNo  CountOfFK_Stock  
9  10 
104  8 
105  3 
106  10 
107  8 
108  10 
109  11 
110  9 

期望的結果(類似):

FK_OrderNo  CountOfFK_Stock  
9  7 
104  8 
105  3 
106  4 
107  7 
108  2 
109  11 
110  6 
+3

樣本數據和預期的結果將有助於 –

+0

@ VR46好所有的屬性,表名,等上面列出的是假的,爲了使問題更吸引人... – Stumbler

+2

耶爲假列名提供一些數據和預期結果 –

回答

3

我猜你正在尋找conditional count

移動where條款過濾器Count Aggregate,使只有當stock.perishable = 0時計數聚合才能計數記錄。

SELECT orderdemo.fk_orderno, 
     Count(CASE 
       WHEN stock.perishable = 0 THEN 1 
      END) AS nonperishable_count 
FROM stock 
     INNER JOIN orderdemo 
       ON stock.studentid = orderdemo.fk_stock 
GROUP BY orderdemo.fk_orderno 

Count骨料可以通過SUM骨料代替爲好。事情是這樣的

Sum(CASE 
     WHEN stock.perishable = 0 THEN 1 
     ELSE 0 
     END) AS nonperishable_count 
+0

謝謝,很快就會嘗試。 – Stumbler

+0

雖然你可能是對的,但基於這個問題,這個答案可能並不正確。如果您不想爲任何原因計算查詢返回的所有記錄,則由您描述的技術非常有用。但是,在問題中,只需要2個字段:訂單號和滿足特定條件的訂單項的數量。這可以通過篩選計算結果的標準來實現。 – Shadow

+0

第2種方法之間的區別僅在處理那些沒有任何與標準相對應的訂單項的訂單時可見。使用內部連接在where條件中進行篩選會看到結果集中遺漏了這些命令,並且您的方法將包含在旁邊的0中。在問題中沒有跡象表明這些訂單應該如何顯示在結果中。 – Shadow