很长一段时间后尝试SQL。 需要您帮助解决此任务。 我创建了一个过程,用于根据其他列组合将列的值从第1行更新为N. 目前,其他列已填充且计算列为空
前:
Account Category Metric Count Calculated Cloumn 5
A 1 ABC 45
A 1 DEF 25
A 1 XYZ
B 5 ABC 29
B 5 DEF
在上表中,计算列5是使用前4个字段组合计算的焦点字段,
前:
if Account=a ,Category=1 and metric -abc,def,xyz then
sum(count) Group by Account and Category
不同组合的不同逻辑。
现在我正在使用以下程序脚本:
SET @variable1 = (select sum(count)
from table1
where [Category] = '1'
and [ACCOUNT] = 'A'
and [Metric Name] = 'ABC' );
SET @variable2 = 'select sum(count)
from table1
where [Category] = '1'
and [ACCOUNT] = 'B'
and [Metric Name] = 'DEF' ';
update [dbo].[table1]
set calculated field = (
(case when
@variable1 > '0'
then
@variable1
else
@variable2
end)
此脚本的问题在于,输出值将跨所有行复制,而不仅仅是针对该组合。
基本上我需要使用分组Account
和Category
列来计算字段,以便仅针对该组合反映输出值。
答案 0 :(得分:0)
试试这个:
UPDATE [dbo].[table1]
SET calculated field = (
(CASE WHEN
@variable1 > '0'
THEN
@variable1
ELSE
@variable2
END)
WHERE [Category] = '1'
AND [ACCOUNT] = 'A'
AND [Metric Name] = 'ABC'
答案 1 :(得分:0)
我假设SQL Server基于语法。
我认为变量不是正确的方法。有关您提供的信息:
with toupdate as (
select t.*,
sum(count) over (partition by Account, Category) as sum_1
from t
)
update toupdate
set calculated_field = sum_1
where Account = 'A' and Category = 1 and metric in ('abc', 'def', 'xyz);