我试图加入2个表来获取输出报告。涉及的表格是库存和日常销售表。
股票和每日销售表:
所需的输出格式:
我正在尝试使用以下查询加入2个表
Select item,article,sold,stockonhand
from stock S
left join dailysales as D on S.item=D.item
group by item
我希望输出包含stock表中的所有行。就像有股票,但没有卖出,也包括在报告中。目前我的报告没有显示,(库存但未售出)。
希望您能理解我的背景或指向我可以阅读的教程。我试着搜索了几天,但找不到一个确切的问题。
答案 0 :(得分: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(对于后面的总和) 然后将select中所有列的结果分组总结(你的查询有什么问题)
答案 1 :(得分:1)
只需LEFT JOIN
两张桌子(也可以获得长笛),执行GROUP BY
和SUM
售出:
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
对于未售出的商品,coalesce
可以将NULL
替换为0
。 (谢谢sagi!)
常规GROUP BY
提示:如果指定了GROUP BY
子句,则SELECT列表中的每个列引用都必须标识分组列或者是set函数的参数。
此外,您可以从article
表中删除dailysales
列。该数据已存储在stock
表中。从不存储两次相同的数据! (规范化!)如果保留该列,则存在数据不一致的风险。
答案 2 :(得分: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