首页 > 解决方案 > 根据同一行中的行值逐行更新列值

问题描述

我有一张这样的memberID桌子Date

MEM_ID          DATE        ttl_sales
-------------------------------------
19960124000007  2020-01-19  NULL
19960131001079  2020-01-20  NULL
19960203001249  2020-01-07  NULL
19960205000213  2020-01-14  NULL

我需要ttl_sales从 a更新sales_table,条件是使用MEM_ID同一行和同一行之前发生的事务DATE

以后可能需要用到类似的功能,但条件更复杂(在给DATE之前加上在某些商店交易,用某些产品等),所以相关的关键词和解决方案都是受欢迎的。

我正在使用 SQL Server。

谢谢你。

标签: sqlsql-serversql-update

解决方案


最简单的方法是协调一个子查询,根据成员 mem_id 对 sales 中的行求和:

UPDATE members
SET ttl_sales = (
  SELECT sum(s.amount) 
  FROM sales s 
  WHERE s.sale_date < members.[date] and s.mem_id = members.mem_id
)

我假设 ttl_sales 是销售总额。如果是计数,请使用COUNT(*)而不是SUM(amount)

您可以向 WHERE 添加更多子句以容忍您对产品、商店等的要求


推荐阅读