从两个表中求和然后用 2 个和执行操作
summing from two tables then preforming an operation with the 2 sums
我正在使用 sql 服务器,我有一个名为 accnt 的 table 字段为 ven1 和 amnt1,还有一个名为 acc1167 的 table 字段为 ven、job# 和 amnt。对于这个例子,这些 table 看起来像这样
accnt acc1167
ven1 amnt1 ven job# amnt
1167 100 1167 1 200
1152 50 1167 2 300
1167 110 1167 3 100
1167 300 1167 4 200
1252 1050 1167 5 200
1167 210 1167 6 150
1167 1150
1167 130
2113 800
1167 550
1167 1200
我需要将 accnt 中所有记录的 amnt1 与 1167 的 ven1 相加,我们将其称为 sumA。然后对所有记录在 acc1167 中求和 amnt,我们将其称为 sumB。接下来我需要将 sumB 除以 sumA 以获得比率。最后,我需要将 acc1167 中的每个 amnt 值乘以比率,然后得到一个数字,然后替换 acc1167 amnt 值。
例如,sumA = 3750,sumB = 1150。采用这些值,sumB/sumA = 0.307。然后我将 acc1167 amnt 中的每个值替换为 0.307* 本身,因此最终的 table 应该如下所示:
acc1167
ven job# amnt
1167 1 61.4
1167 2 92.1
1167 3 30.7
1167 4 61.4
1167 5 61.4
1167 6 46.05
我尝试过使用 sum 函数和一些插入,但我对 SQL 很陌生,之前从未使用过 sum 并且不知道如何从多个 table 调用s,或者如何存储比率。我试过这个:
UPDATE acc1167
sum1 = sum amnt1 where ven1 = '1167'
from accnt
sum2 = sum amnt
from accnt
SET amnt = sum2/sum1*amnt
FROM acc1167
好吧,你完全可以根据你的任务描述来完成它:
declare @sumA decimal(29, 10), @sumB decimal(29, 10), @ratio decimal(29, 10)
select @sumA = sum(amnt1) from accnt where ven1 = 1167
select @sumB = sum(amnt) from acc1167
select @ratio = @sumB / @sumA
update acc1167 set amnt = amnt * @ratio
尝试以下操作:
DECLARE @accnt TABLE ( ven1 INT, amnt1 MONEY )
DECLARE @acc1167 TABLE
(
ven INT ,
job INT ,
amnt MONEY
)
INSERT INTO @accnt
VALUES ( 1167, 100 ),
( 1152, 50 ),
( 1167, 110 ),
( 1167, 300 ),
( 1252, 1050 ),
( 1167, 210 ),
( 1167, 1150 ),
( 1167, 130 ),
( 2113, 800 ),
( 1167, 550 ),
( 1167, 1200 )
INSERT INTO @acc1167
VALUES ( 1167, 1, 200 ),
( 1167, 2, 300 ),
( 1167, 3, 100 ),
( 1167, 4, 200 ),
( 1167, 5, 200 ),
( 1167, 6, 150 )
;WITH cte AS(SELECT *, amnt * SUM(amnt) OVER() /
(SELECT SUM(amnt1) FROM @accnt WHERE ven1 = 1167 ) namnt
FROM @acc1167)
UPDATE cte SET amnt = namnt
SELECT * FROM @acc1167
输出:
ven job amnt
1167 1 61.3333
1167 2 92.00
1167 3 30.6666
1167 4 61.3333
1167 5 61.3333
1167 6 46.00
我正在使用 sql 服务器,我有一个名为 accnt 的 table 字段为 ven1 和 amnt1,还有一个名为 acc1167 的 table 字段为 ven、job# 和 amnt。对于这个例子,这些 table 看起来像这样
accnt acc1167
ven1 amnt1 ven job# amnt
1167 100 1167 1 200
1152 50 1167 2 300
1167 110 1167 3 100
1167 300 1167 4 200
1252 1050 1167 5 200
1167 210 1167 6 150
1167 1150
1167 130
2113 800
1167 550
1167 1200
我需要将 accnt 中所有记录的 amnt1 与 1167 的 ven1 相加,我们将其称为 sumA。然后对所有记录在 acc1167 中求和 amnt,我们将其称为 sumB。接下来我需要将 sumB 除以 sumA 以获得比率。最后,我需要将 acc1167 中的每个 amnt 值乘以比率,然后得到一个数字,然后替换 acc1167 amnt 值。
例如,sumA = 3750,sumB = 1150。采用这些值,sumB/sumA = 0.307。然后我将 acc1167 amnt 中的每个值替换为 0.307* 本身,因此最终的 table 应该如下所示:
acc1167
ven job# amnt
1167 1 61.4
1167 2 92.1
1167 3 30.7
1167 4 61.4
1167 5 61.4
1167 6 46.05
我尝试过使用 sum 函数和一些插入,但我对 SQL 很陌生,之前从未使用过 sum 并且不知道如何从多个 table 调用s,或者如何存储比率。我试过这个:
UPDATE acc1167
sum1 = sum amnt1 where ven1 = '1167'
from accnt
sum2 = sum amnt
from accnt
SET amnt = sum2/sum1*amnt
FROM acc1167
好吧,你完全可以根据你的任务描述来完成它:
declare @sumA decimal(29, 10), @sumB decimal(29, 10), @ratio decimal(29, 10)
select @sumA = sum(amnt1) from accnt where ven1 = 1167
select @sumB = sum(amnt) from acc1167
select @ratio = @sumB / @sumA
update acc1167 set amnt = amnt * @ratio
尝试以下操作:
DECLARE @accnt TABLE ( ven1 INT, amnt1 MONEY )
DECLARE @acc1167 TABLE
(
ven INT ,
job INT ,
amnt MONEY
)
INSERT INTO @accnt
VALUES ( 1167, 100 ),
( 1152, 50 ),
( 1167, 110 ),
( 1167, 300 ),
( 1252, 1050 ),
( 1167, 210 ),
( 1167, 1150 ),
( 1167, 130 ),
( 2113, 800 ),
( 1167, 550 ),
( 1167, 1200 )
INSERT INTO @acc1167
VALUES ( 1167, 1, 200 ),
( 1167, 2, 300 ),
( 1167, 3, 100 ),
( 1167, 4, 200 ),
( 1167, 5, 200 ),
( 1167, 6, 150 )
;WITH cte AS(SELECT *, amnt * SUM(amnt) OVER() /
(SELECT SUM(amnt1) FROM @accnt WHERE ven1 = 1167 ) namnt
FROM @acc1167)
UPDATE cte SET amnt = namnt
SELECT * FROM @acc1167
输出:
ven job amnt
1167 1 61.3333
1167 2 92.00
1167 3 30.6666
1167 4 61.3333
1167 5 61.3333
1167 6 46.00