sql - DISTINCT 在左连接中无法正常工作
问题描述
我有两张桌子StockIn
和StockOut
.
StockIn
table 有一个产品的 ID 号,这个 ID 号在StockIn
表中是唯一的,否则这个 ID 号将在StockOut
表中重复,因为库存将售罄。
现在我想创建一个视图来查找手头的库存 where StockIn.Id
= StockOut.Id
。到目前为止,我设法查询并给出了结果,但是当StockOut
同一产品的表中有多个订单时,由于 ID 号重复,它会失败。
以下是我的查询:
select DISTINCT
i.Id,
i.AssetsName,
i.Rate,
i.Qty,
So.QtyOut,
Balance = sum( COALESCE(i.Qty,0)- COALESCE(so.QtyOut,0)) OVER(PARTITION BY i.id)
from dbo.StockIn i
LEFT Join StockOut So
on i.Id = So.Id
GO
解决方案
一个带有普通 SUM 的简单 GROUP BY 应该可以。
SELECT
si.Id,
si.AssetsName,
si.Rate,
si.Qty,
SUM(so.QtyOut) AS QtyOut,
COALESCE(si.Qty, 0) - SUM(so.QtyOut) AS Balance
FROM dbo.StockIn si
LEFT JOIN dbo.StockOut so ON so.Id = si.Id
GROUP BY si.Id, si.AssetsName, si.Rate, si.Qty;
推荐阅读
- amazon-athena - 日志格式缺少字段时创建 Athena Schema
- python - 如何在调用堆栈中询问更高的变量(不传递参数)?
- r - 在嵌套列表中的元素位置上使用 purrr?
- vb.net - 抛出异常:Microsoft.VisualBasic.dll 中的“System.ArgumentException”尝试删除空文件夹时
- javascript - 显示自上次 ajax 调用以来的时间
- java - 该请求未指定任何 Android 软件包名称或签名证书指纹
- google-sheets - 有没有办法在单元格中使用查询功能时创建多个过滤器?
- javascript - 正确转义 javascript 对象
- python - 微宏和加权平均都具有相同的精度、召回率、f1-score
- c# - Gremlin .Net,按包含值的属性过滤顶点