根据组度量更新行

时间:2013-02-23 01:59:28

标签: sql sql-server

[UNIT] [PRICE] [QUANTITY] [REVENUE]     [PERCENTAGE]
A      $10     25         $250           25%
B      $5      30         $150           15%
C      $20     30         $600           60%
Total Revenue             $1,000             100%

我正在尝试创建一个查询来计算[PERCENTAGE]列,这是我使用的:

UPDATE Table
SET [PERCENTAGE] = (PRICE*QUANTITY)/(sum(PRICE*QUANTITY)

以下是错误消息:

聚合可能不会出现在UPDATE语句的集合列表中。

有任何建议吗?

感谢您的阅读。

2 个答案:

答案 0 :(得分:2)

UPDATE
    t1 target
    CROSS JOIN t1 src
SET
    target.PERCENTAGE = target.PRICE * target.QUANTITY / 
(SELECT SUM(src.PRICE * src.QUANTITY))

答案 1 :(得分:0)

我建议使用窗口函数和with子句来执行此操作:

with toupdate as (
      select t.*,
             sum(price*quantity) over () as total
      from t
     )
update toupdate
    set percentage = price*quantity / total;