2016-01-13 47 views
1

我試圖加入2個表格以獲取輸出報告。涉及的表格是股票和dailysales表。加入2個表格錯誤

股票和Dailysales表:

enter image description here

所需的輸出格式:

enter image description here

我試圖通過使用下面的查詢

Select item,article,sold,stockonhand 
from stock S 
left join dailysales as D on S.item=D.item 
group by item 

加入2個表我想要t他輸出包括股票表中的所有行。像股票一樣,但沒有出售,也包括在報告中。目前我的報告是不顯示,(庫存,但沒有出售)。

希望你能理解我的上下文或者指向我可以閱讀的教程。我試圖搜索幾天,找不到確切的問題。

+0

什麼錯誤你得到,也只需確保在選擇查詢指定列所屬的表.. –

+0

您正在使用「分組依據」,沒有聚合功能,使任何sens –

+0

我試過Sagi的解決方案,並得到3行結果。第126項(吉他)還沒有出現。這件商品沒有出售,但已經有貨了,所以我希望這件物品也能出現。 – louise

回答

0

您可以在分離表總結該項目,這將是清楚不過GROUP BY 2表

SELECT 
    s.item, 
    s.article, 
    ISNULL(ds.sold, 0) AS qtysold, 
    s.stockonhand 
FROM 
    stock s OUTER APPLY 
    (SELECT SUM(sold) AS sold FROM dailysales WHERE item = s.item GROUP BY item) ds 
+0

謝謝,這解決了我的問題 – louise

2

未測試 -

select item,article,sum(sold),sum(stockonhand)-sum(sold) from (
select a.item,a.article,a.stockonhand,case when b.sold is null then 0 else b.sold end as sold 
from stock a left join dailysales b on (a.item = b.item)) 
group by item,article; 

它基本上沒有左連接和(後總和)在零柱把0 然後總結成績在選擇所有列分組(什麼錯了你的查詢)

1

只需LEFT JOIN兩個表(獲取笛太),做一個GROUP BYSUM售出:

select s.item, s.article, coalesce(SUM(d.sold),0) as "qty sold", s.stockonhand 
from stock S 
left join dailysales as D on S.item=D.item 
group by s.item, s.article, s.stockonhand 

​​3210用於替代NULL0,對於未售出的物品。 (Thanks sagi!)

常規GROUP BY小技巧:如果指定了GROUP BY子句,SELECT列表中的每個列引用必須標識分組列或者是set函數的參數。

此外,您可以從dailysales表中刪除article列。該數據已存儲在stock表中。切勿存儲兩次相同的數據! (標準化!)如果您保留該列,則存在數據不一致的風險。

+0

,它也會始終顯示5條記錄,並且在總結它們時會出現空列嗎? – sagi

+0

空值不計算在內。 – jarlh

+0

但他希望他們出現在結果上0 – sagi