2016-01-13 173 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