我写了一篇与此类似的声明。我是 SQL 新手,想知道如何或是否可以使用SUM(___)over(partition by ___) 该 PartID 的所有 NonUsableTotal 零件库存求和。
问题是这f.Netflag是一个数值,可以1 or 0将其定义为可用或不可用。
这是声明:
select distinct
l.whse,
l.partid,
i.descr,
l.qty,
case when f.Netflag=0 then 'NONUsable' else 'Usable' end as UsableStatus,
SUM(l.qty*f.Netflag) over (partition by l.partid) as TotalUsable
from location l (nolock)
join inventory i (nolock)
on l.partid=i.partid
join loctable f (nolock)
on l.whse=f.whse
Run Code Online (Sandbox Code Playgroud)
这是我希望结果的样子:
+-------+--------+-----+------------+-----------+--------------+
|Partid | Whse | Qty |UsableStatus|TotalUsable|TotalNonUsable|
+-------+--------+-----+------------+-----------+--------------+
134 INSP 10 Usable 30 20
134 RRR 15 NONUsable 30 20
134 VVV 20 Usable 30 20
134 QRR 5 NONUsable 30 20
Run Code Online (Sandbox Code Playgroud)
我感谢你的帮助谢谢。
你可以CASE在里面使用一个表达式SUM():
SELECT
l.whse, l.partid, i.descr, l.qty,
CASE WHEN f.Netflag = 0 THEN 'NONUsable' ELSE 'Usable' END
AS UsableStatus,
SUM(CASE WHEN f.Netflag = 0 THEN l.qty ELSE 0 END)
OVER (PARTITION BY l.partid) AS TotalNonUsable,
SUM(CASE WHEN f.Netflag = 0 THEN 0 ELSE l.qty END)
OVER (PARTITION BY l.partid) AS TotalUsable
FROM
location l
JOIN inventory AS i ON l.partid = i.partid
JOIN loctable AS f ON l.whse = f.whse ;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我不明白您为什么需要DISTINCT在查询中。
| 归档时间: |
|
| 查看次数: |
4075 次 |
| 最近记录: |