我需要找到一种方法来获取SUM()
所有正值num
并返回SUM()
所有正数和每个负数的单独行。下面是一个示例 DDL:
Create Table #Be
(
id int
, salesid int
, num decimal(16,4)
)
Insert Into #BE Values
(1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00)
, (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23)
, (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32)
这是我想要的输出(每个 salesidSUM()
的正数和负数返回单独的行):
salesid num
1 26.32
1 -13.00
2 47.35
3 -12.32
3 -43.23
3 -2.32
尝试这个:
如果您希望将两个
sum
值都放在一行中,则必须创建一个maxValue
(andminValue
) 函数并将其用作sum(maxValue(0, num))
andsum(minValue(0, num))
。这在中有所描述:SQL Server 中是否有一个 Max 函数,它接受两个值,例如 .NET 中的 Math.Max?这也有效:
假设:
THEN 0
.salesid ELSE salesid+id+1
也可以>= 0
(是零是正数还是负数?)。尽管x+0=x
似乎使该=
符号变得不必要,但它有助于记住这种情况并没有被遗忘以及如何处理 0(作为 SUM 或作为单独的行)。如果the SUM() of all positive numbers
均值SUM of strictly positive numbers
(即 > 0),则=
不需要。它必须使用真实的数据和索引进行测试,但只有 1 次表扫描,在某些情况下性能可能会好一些。
此查询对以下测试数据的影响似乎较小: