查询三个表的巧合

问题描述

我的ERP中有三个表,并且需要SQL Server查询以联接所有行。 这是我拥有的三个表及其属性,这些表通过产品代码(SL.CodProduct ='AL4301')进行过滤以简化操作:

餐桌产品:

Table Products

  • CodProduct
  • DescProduct
  • 家庭

桌子上的东西

Table Stocks

  • CodProduct
  • 颜色
  • 号码
  • UnitsStock

表出售:

Table Sells

  • CodProduct
  • DateSold
  • 颜色
  • 号码
  • UnitsSold

我需要获取所有项目组合的列表(颜色-数字),显示每月销售额和当前总库存。问题是,对于某些项目组合,没有销售。

我已通过以下查询尝试过它:

SELECT DatePart(mm,SELLS.DateSold) As Month,SELLS.CodProduct,PRODUCTS.DescProduct,SELLS.Color,SELLS.Number,SUM(SELLS.UnitsSold,(SELECT STOCKS.UnitsStock
        FROM STOCKS WITH(NOLOCK)
        WHERE STOCKS.CodProduct = SELLS.CodProduct
        AND STOCKS.Color = SELLS.Color AND STOCKS.Number = SELLS.Number) As Stock
FROM SELLS WITH(NOLOCK)
JOIN PRODUCTS WITH (NOLOCK) ON PRODUCTS.CodProduct = SELLS.CodProduct
WHERE PRODUCTS.Family = 05 AND SELLS.CodProducto = 'AL4301'
GROUP BY DatePart(mm,SELLS.DateSold),SELLS.DescProduct,SELLS.Number
ORDER BY SELLS.CodProduct,SELLS.Number

通过此查询,我可以获得:

Query result

但是我需要得到这个:

Query objetive

感谢@Gordon Linoff,我得到了解决方案。最后我用了这个:

SELECT ST.CODPRODUCT,ST.DESPRODUCT,ST.COLOR,ST.NUMBER,P.FAMILY,ST.UNITSSTOCK STOCK,SLL.MONTH,SLL.UNITSSOLD       
FROM STOCKS ST
JOIN PRODUCTS P ON P.CODPRODUCT = ST.CODPRODUCT
LEFT OUTER JOIN
        (SELECT SL.CODPRODUCT,SL.COLOR,SL.NUMBER,DatePart(mm,SL.DATESOLD) MONTH,SUM(SL.UNITSSOLD) UNITSSOLD
         FROM SELLS SL
         GROUP BY SL.CODPRODUCT,SL.DATESOLD),SL.NUMBER) SLL
ON SLL.CODPRODUCT = ST.CODPRODUCT
   AND SLL.COLOR = ST.COLOR
   AND SLL.NUMBER = ST.NUMBER
ORDER BY ST.CODPRODUCT,ST.NUMBER

解决方法

使用cross join生成库存和月份的所有组合。然后使用left join和聚合:

select s.codproduct,s.color,s.number,year(v.month),month(v.month),s.unitsstock,sum(sa.unitssold)
from stocks s cross join
     (values ('2020-09-01')) v(month) left join
     sales sa
     on s.codproduct = sa.codproduct and
        s.color = sa.color and
        s.number = sa.number and
        sa.datesold >= v.month and
        sa.datesold < dateadd(month,1,v.month)
group by s.codproduct,s.unitsstock;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...