我正在使用sql-server。我有一张表,其中包含公司列表的价值。我希望将每个公司的百分比作为此列表的一部分。见下面的例子
name value wgt%
abc 10
plm 15
xyz 25
以上是我所拥有的,下面是我想要的,
name value wgt%
abc 10 20
plm 15 30
xyz 25 50
我尝试过类似的事情:
update D_COMP_VALUES
set wgt = value / sum(value)
答案 0 :(得分:3)
使用子选项获得总和:
update D_COMP_VALUES
set wgt = 100 * value / (select sum(value) from D_COMP_VALUES)
但是存储计算值通常是个坏主意。相反,创建一个视图,永远不会有不一致的数据!
答案 1 :(得分:1)
我会使用窗口函数来解决这个问题:
with toupdate as
select cv.*, sum(value) over () as sumvalue
from d_comp_values
)
update toupdate
set wgt = value / sumvalue;
请注意,SQL Server会执行整数除法,因此如果value
是整数(如示例数据所示),除非转换为其他数字表示形式,否则可能会为零:
set wgt = value * 1.0 / sumvalue;
答案 2 :(得分:1)
更新连接似乎按顺序:
UPDATE d
SET wgt = value * 100.0 / sumvalue
FROM d_comp_values d
CROSS JOIN (SELECT SUM(value) AS sumvalue FROM d_comp_values) agg
答案 3 :(得分:1)
您可以进行简单的更新:
UPDATE D_COMP_VALUES
SET wgt = value * 100 / (SELECT SUM(value) FROM D_COMP_VALUES)
答案 4 :(得分:0)
我会将实施留给您,但这就是我的方式。
也就是说,将这些信息存储在表格中是一个坏主意,您应该计算它或使用视图。