我需要找到一种方法来SUM()num的所有正值,并返回所有正数的SUM()和每个负数的单独行.以下是DDL示例:
- Create Table #Be
- (
- id int,salesid int,num decimal(16,4)
- )
- Insert Into #BE Values
- (1,1,12.32),(2,-13.00),(3,14.00),(4,2,12.12),(5,(6,21.23),(7,3,-12.32),(8,-43.23),(9,-2.32)
这是我想要的输出(每个salesid SUM()的正数和负数返回单个行):
- salesid num
- 1 26.32
- 1 -13.00
- 2 47.35
- 3 -12.32
- 3 -43.23
- 3 -2.32
解决方法
试试这个:
- SELECT salesid,sum(num) as num
- FROM #BE
- WHERE num > 0
- GROUP BY salesid
- UNION ALL
- SELECT salesid,num
- FROM #BE
- WHERE num < 0;
如果你想要两行中的和值,那么你必须创建一个maxValue(和minValue)函数并将其用作sum(maxValue(0,num))和sum(minValue(0,num)).这在以下描述:Is there a Max function in SQL Server that takes two values like Math.Max in .NET?