我试图弄清楚如果仅在特定类型的交易类型的分组总数超过零的情况下更新具有值的记录。 换句话说,我按付款类型对交易进行分组。如果分组的支付类型总数大于零,我想用一个值更新组中的每个事务。 我无法弄清楚正确的陈述。有人可以帮忙吗?
UPDATE
T
SET
T.col1 = OT.col1,
T.col2 = OT.col2
FROM
Some_Table T
INNER JOIN
Other_Table OT ON T.id = OT.id
WHERE
T.col3 = 'xyz'
-- GROUP BY T.col1
-- HAVING SUM(amount) > 0
答案 0 :(得分:1)
您可以将CTE
与SUM() OVER()
:
;WITH ToUpdate AS (
SELECT T.col1 AS tcol1, OT.col1 AS otcol1, T.col2 AS tcol2, OT.col2 AS otcol2,
SUM(amount) OVER (PARTITION BY T.col1) AS sumAmount
FROM Some_Table T
INNER JOIN Other_Table OT ON T.id = OT.id
)
UPDATE ToUpdate
SET
tcol1 = otcol1,
tcol2 = otcol2
WHERE sumAmount > 0
以上查询将使用Some_Table
更新属于col1
分区的SUM(amount) > 0
的每一行。