【问题标题】:Joining 2 tables error加入 2 个表错误
【发布时间】:2016-01-13 07:56:02
【问题描述】:

我正在尝试加入 2 个表格以获得输出报告。涉及的表是 stock 和 dailysales 表。

Stock 和 Dailysales 表:

所需的输出格式:

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

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

我希望输出包含 stock 表中的所有行。像有存货,但未售出,也要列入报告。目前我的报告未显示,(有库存但未售出)。

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

【问题讨论】:

  • 您遇到了什么错误,并且只需确保在选择查询中指定列属于哪个表..
  • 您正在使用“分组依据”,没有任何意义的聚合函数
  • 我尝试了 Sagi 的解决方案,得到了 3 行结果。项目 126(吉他)仍未出现。这件商品不卖,但有库存,所以我也希望它出现。
  • 我可以让长笛显示,但它是吉他没有显示,我尝试了所有连接但无法显示。它总是会向我显示右表中的记录。左 stock 表 100 条记录,右 sales 表 5 条记录,但它总是会显示 5 条记录,即使使用 left join

标签: sql join left-join inner-join


【解决方案1】:

未测试-

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放在空列上(用于求和) 然后按选择中的所有列汇总结果分组(您的查询有什么问题)

【讨论】:

    【解决方案2】:

    只需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
    

    coalesce 用于将NULL 替换为0,用于未售出的商品。 (谢谢sagi!)

    一般GROUP BY 提示:如果指定了GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。

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

    【讨论】:

    • 当你对它们求和时,空列会发生什么?
    • NULL 不计算在内。
    • 但他希望它们在结果中显示为 0
    • 我不知道为什么我无法让那些未售出的物品(在本例中为吉他)出现。左连接似乎不起作用。结果仅显示已售出的。
    • 我可以让长笛显示,但它是吉他没有显示,我尝试了所有连接但无法显示。它总是会向我显示右表中的记录。左侧库存表 100 条记录,右侧销售表 5 条记录,但即使使用左连接,它也会始终显示 5 条记录。
    【解决方案3】:

    您可以在一个单独的表格中对项目进行汇总,它会比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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多