SQL逻辑-包含Group By子句的Update语句的逻辑
在很长一段时间后尝试SQL。 需要你帮忙解决这个任务。 我创建了一个过程,用于根据其他列组合将列的值从第1行更新到第N行。 当前,填充了其他列,计算列为空 例: 在上表中,计算列5是要使用前4个字段的组合计算的焦点字段 例: 不同的组合有不同的逻辑 现在我使用以下程序脚本:SQL逻辑-包含Group By子句的Update语句的逻辑,sql,group-by,logic,Sql,Group By,Logic,在很长一段时间后尝试SQL。 需要你帮忙解决这个任务。 我创建了一个过程,用于根据其他列组合将列的值从第1行更新到第N行。 当前,填充了其他列,计算列为空 例: 在上表中,计算列5是要使用前4个字段的组合计算的焦点字段 例: 不同的组合有不同的逻辑 现在我使用以下程序脚本: SET @variable1 = (select sum(count) from table1 where [Category] = '1' and [ACCOUNT] = 'A' and
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)
这个脚本的问题是,输出值是跨所有行复制的,而不仅仅是针对该组合。
基本上,我需要在计算字段中使用Group byAccount
和Category
列,以便输出值仅反映该组合。尝试以下操作:
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'
我假设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);
什么是RDBMS?也许?显然不理解您的问题,但variable1值是您的第一条记录,它意味着45,variable2值是0,因为他们没有这样的记录,它将更新45到所有记录,因为他们没有条件。那么你能正确地回答吗explain@KavalPatel你的理解部分正确。实际需要的是,只有在Account和Category分别为A和1的前两行中才有值45。对于其余行,它仍应标记为null。请参阅文章的最后一段,即需要使用帐户和类别字段编写组。
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'
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);