gpt4 book ai didi

sql-server - SQL SUM(QTY) 但仅适用于 QTY > 0 的记录

转载 作者:行者123 更新时间:2023-12-02 01:02:34 25 4
gpt4 key购买 nike

编辑:当有另一个标准(见下文,添加的代码)和 qtyRemaining = SUM(qty) 时,如何处理这个问题?当代码为 IN (25, 26) 但不是 27 时。

我有一系列记录,一些记录的数量 < 0,其他记录的数量 > 0。我在下面有字段 1 和 2,我的目标是获得字段 3:

ref_x         qty     code      qtyRemaining(goal) 
--------------------------------------------------
TKAB030AA 0 25 0
TKAB030AA 0 25 0
TKAB030AA -3 26 0
TKAB030AA -197 26 0
TKAB030AA 3 27 -200
TKAB030AA 197 27 -200

逻辑是,如果qty < 0 , 然后 qtyRemaining应为 0,但如果 qty > 0 , SUM(qty where trcode IN(25, 26)) (甚至记录 qty < 0 )按 ref_x 分组.

我遇到的问题是我做不到:

CASE 
WHEN qty < 0
THEN 0
ELSE SUM(QTY)
END [QtyRemaining]

...因为 SQL 要我将 qty 放在组中,因为它在 SUM() 之外功能。但如果我这样做:

, SUM(CASE WHEN qty < 0 THEN 0 ELSE QTY END) [QtyRemaining]

...这也不是我想要的。有什么方法可以做到这一点我只是没有看到吗?请帮忙!

最佳答案

我认为最好的办法是在这里使用窗口函数。聚合并不是您真正想要的,因为从您的问题来看,您似乎希望显示所有行:

SELECT ref_x, qty
, CASE WHEN qty <= 0 THEN 0 ELSE SUM(qty) OVER ( PARTITION BY ref_x ) END AS [QtyRemaining]
FROM mytable;

您可以通过使用聚合并将表连接到自身来获得相同的答案,但需要输入更多内容:

WITH t2 AS (
SELECT ref_x, SUM(qty) AS total_qty
GROUP BY ref_x
)
SELECT t1.ref_x, t1.qty
, CASE WHEN t1.qty <= 0 THEN 0 ELSE t2.total_qty END AS [QtyRemaining]
FROM t1 INNER JOIN t2
ON t1.ref_x = t2.ref_x;

编辑新条件:

我想你会想要这个:

SELECT ref_x, qty
, CASE WHEN qty <= 0 THEN 0 ELSE SUM(CASE WHEN code IN (25,26) THEN qty ELSE 0 END) OVER ( PARTITION BY ref_x ) END AS [QtyRemaining]
FROM mytable;

希望这对您有所帮助。

关于sql-server - SQL SUM(QTY) 但仅适用于 QTY > 0 的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49561892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com