加入 2 个表错误

Joining 2 tables error

我正在尝试加入 2 tables 以获得输出报告。涉及的 table 是股票和每日销售额 table。

股票和每日销售 tables:

所需的输出格式:

我正在尝试使用以下查询加入 2 tables

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

我希望输出包括股票 table 中的所有行。比如有存货,但没有卖掉,也要列入报表。目前我的报告没有显示,(有货但未售出)。

希望您能理解我的上下文或指出我可以阅读的教程。我试着搜索了几天,但找不到适合我的确切问题。

未测试 -

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 中所有列的结果分组(你的查询出了什么问题)

简单地 LEFT JOIN 两个 table(也得到长笛),做一个 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 列表中的每个列引用必须标识一个分组列或作为参数一组函数。

此外,您可以从 dailysales table 中删除 article 列。该数据已存储在 stock table 中。永远不要存储相同的数据两次! (规范化!)如果保留该列,则存在数据不一致的风险。

你可以在一个单独的 table 中对项目求和,这样会比 GROUP BY 2 tables

更清楚
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