【问题标题】:SQL SUM ON JOINSQL SUM ON JOIN
【发布时间】:2021-01-07 00:00:21
【问题描述】:

先生,我有 3 个 SQL 表,即库存、购买和销售。 在库存表中,我有 SKU、数量、MRP 等字段 在购买表中,我有 SKU、purch_qty、purch_date 等字段。 在已售出的表中,我有 SKU、sold_qty、sold_date 等字段。

我的查询是当我想创建一个视图时,我可以在其中查看所有 SKU 的初始数量、已售数量、puch_qty、availabe_Qty,例如(SKU、initial_qty、purchase_qty、sold_qty、stock_availabe)

我尝试在 SKU 上加入这些表,但结果是数量增加了两倍。

你能帮我解决这个问题吗?

我的sql查询代码是

    SELECT        stk.id, stk.sku, SUM(stk.qty) AS Initial_Qty, SUM(pur.qty) AS Purch_Qty, SUM(sld.qty) AS Sold_Qty
FROM            dbo.stock AS stk LEFT OUTER JOIN
                         dbo.sold AS sld ON stk.sku = sld.sku LEFT OUTER JOIN
                         dbo.purchase AS pur ON stk.sku = pur.sku
GROUP BY stk.id, stk.sku

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本(无图像)。 minimal reproducible example.
  • 顺便说一句,您的表格有,而不是字段。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
  • 给您带来的不便,我深表歉意。我将使用相关表和代码更新查询。

标签: sql group-by sum subquery left-join


【解决方案1】:

基本上,您需要在加入之前聚合子查询。你想要的逻辑应该是这样的:

select st.sku, st.qty stock_qty, pu.purch_qty, so.sold_qty
from stock st
left join (select sku, sum(purch_qty) purch_qty from purchase group by sku) pu 
    on pu.sku = st.sku
left join (select sku, sum(sold_qty) sold_qty from sold group by sku) so
    on so.sku = st.sku

【讨论】:

  • 先生有没有什么办法可以把现货作为新的cooloum
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多