【发布时间】:2018-01-17 20:24:35
【问题描述】:
我有一个关于如何仅在字段更改时对列求和的问题。
以下表为例:
请注意,A 列和 B 列是不同的表。 IE。 A从表X中选择,B从表Y中选择
选择 X.A、Y.B
来自 X
在 X.DATE = Y.DATE 和 X.VAL1 = 上的内部连接 Y Y.VAL1 和 X.VAL2 = Y.VAL2
A B
123 5
123 5
456 10
789 15
789 15
我需要对 A 列字段更改的 B 列求和:
即查询应该返回 5 + 10 + 15 = 30 (第一次是 5,因为 A 列中的值是 123,第二次是 10,因为 A 列从 123 变为 456 - 注意第二行是跳过,因为 A 列仍然包含值 123 - 因此字段逻辑的变化等等)。
我不能做一个简单的SUM(B),因为那样会返回 50。我也不能做SUM(B) OVER (PARTITION BY A),因为那会按组计算,而不是按字段变化计算。
我的输出需要如下所示:
A B X
123 5 5
123 5 5
456 10 15
789 15 30
789 15 30
我试图在一个简单的查询中做到这一点。我可以使用特定的功能来执行此操作吗?
【问题讨论】:
-
是否可能有两行 A 的值相同但 B 的值不同?
-
@Aleksej 不,B 的值将始终相同。重复项来自 A。请注意,A 列是一个表,B 列是另一个表