【问题标题】:Updating Variable with Current Row Value使用当前行值更新变量
【发布时间】:2013-01-10 19:18:39
【问题描述】:

我正在尝试执行一个复杂的操作,我提取一整列数据的总和,并从每一行的总和中减去运行小计。我可以单独完成 Sum 和 Running Subtotal 的组成部分。用于运行小计:

sum(UsageMetric) over(order by Nested1.IDNumber) as RunningTotal

但是,在尝试合并它们时出现此错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或使用子查询时,这是不允许的 作为表达式。

所以我对此进行了操纵,它返回给定行的“独立”运行小计:

declare @TargetNumber BIGINT
Set @TargetNumber=(select Nested1.IDNumber from TargetTable Nested1 where Nested1.IdNumber='1234567890' and (Extraneous Criteria Here))

select  sum(Usage.UsageMetric) 
from Table_Usage Usage, IDTable IDT
where IDT.IDNumber <= @TargetNumber
and (Extraneous Criteria Here)

但我真正想做的是能够删除限定符“Nested1.IDNumber='1234567890' 并为 TargetTable 中的每个 IDNumber 执行此操作。

【问题讨论】:

    标签: sql tsql variables subquery sql-server-2012


    【解决方案1】:

    如果我理解正确,您可以执行以下操作:

    sum(UsageMetric) over () -
    sum(UsageMetric) over (order by Nested1.IDNumber) as ...
    

    虽然简单地恢复 OVER 子句中的行顺序会产生相同的结果,但我相信:

    sum(UsageMetric) over (order by Nested1.IDNumber DESC) as ...
    

    【讨论】:

    • 最简单的代码就是最好的代码总是让我感到惊讶。非常感谢。这比我尝试做的要容易得多。我仍然需要学习如何在 SQL 中正确使用变量,但这会让我到达我需要去的地方。
    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多