Sql 连接两个表时出错

Sql 连接两个表时出错,sql,join,left-join,inner-join,Sql,Join,Left Join,Inner Join,我正在尝试连接两个表以获得输出报告。所涉及的表格是库存和日销售额表 库存和日销售额表: 所需的输出格式: 我正试图使用下面的查询连接两个表 Select item,article,sold,stockonhand from stock S left join dailysales as D on S.item=D.item group by item 我希望输出包括stock表中的所有行。如有库存,但未售出,也将纳入报告。目前我的报告未显示(库存但未出售) 希望你能理解我的背景,或者给我指

我正在尝试连接两个表以获得输出报告。所涉及的表格是库存和日销售额表

库存和日销售额表:

所需的输出格式:

我正试图使用下面的查询连接两个表

Select item,article,sold,stockonhand
from stock S
left join dailysales as D on S.item=D.item
group by item
我希望输出包括stock表中的所有行。如有库存,但未售出,也将纳入报告。目前我的报告未显示(库存但未出售)

希望你能理解我的背景,或者给我指一本我可以读的教程。我试着搜索了几天,却找不到一个确切的问题。

没有测试-

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放在空列上(对于sum after)
然后按select中的所有列对结果分组进行汇总(这是您的查询出了什么问题)

简单地将两个表(也要获得长笛)左键连接起来,按
分组,然后对已售出的:

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
表中删除
article
列。该数据已存储在
stock
表中。永远不要存储相同的数据两次!(规范化!)如果保留该列,则存在数据不一致的风险。

您可以在一个单独的表格中对项目进行求和,这将比
分组方式
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

您得到的是什么错误,并且只需确保在select查询中指定列属于哪个表..您使用的是“Group By”,没有任何聚合函数,因此我尝试了Sagi的解决方案,得到了3行结果。第126项(吉他)仍未出现。这件东西没有卖,但有存货,所以我也希望它能出现。我能让长笛显示出来,但吉他没有显示出来,我尝试了所有的连接,但无法让它显示出来。它将始终显示正确表中的记录。左边的库存表100条记录,右边的销售表5条记录,但即使使用左边的连接,它也会始终显示5条记录,当您对它们求和时,null列会发生什么?null不算在内。但他希望它们显示在结果上,因为0我不确定为什么我无法显示那些未售出的项目(在本例中为吉他)。左连接似乎不起作用。结果只显示了那些售出的。我可以让长笛显示,但吉他没有显示,我尝试了所有的连接,但无法让它显示。它将始终显示正确表中的记录。左边的库存表有100条记录,右边的销售表有5条记录,但即使有左边的连接,它也会显示5条记录。