MS SQL 2008 - 如果分组总数满足条件,则使用值更新记录

时间:2015-10-27 13:14:29

标签: sql-server sql-server-2008

我试图弄清楚如果仅在特定类型的交易类型的分组总数超过零的情况下更新具有值的记录。 换句话说,我按付款类型对交易进行分组。如果分组的支付类型总数大于零,我想用一个值更新组中的每个事务。 我无法弄清楚正确的陈述。有人可以帮忙吗?

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

1 个答案:

答案 0 :(得分:1)

您可以将CTESUM() 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的每一行。