Sql 存在CASE语句时,汇总行未正确求和

Sql 存在CASE语句时,汇总行未正确求和,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图写一份报告,我99%的工作方式,除了一个列没有正确汇总。我相信我在下面复制了一个简单的版本: 代码 DECLARE @table TABLE ( id VARCHAR(10) ,number1 MONEY ,number2 MONEY ) INSERT INTO @table ( id ,number1 ,number2 ) VALUES ( 1 ,10 ,200 ) INSERT INTO @table ( id ,number1 ,number2 ) VALUES ( 2

我试图写一份报告,我99%的工作方式,除了一个列没有正确汇总。我相信我在下面复制了一个简单的版本:

代码

DECLARE @table TABLE (
 id VARCHAR(10)
,number1 MONEY
,number2 MONEY
)

INSERT INTO @table (
 id
,number1
,number2
) VALUES (
 1
,10
,200
)

INSERT INTO @table (
 id
,number1
,number2
) VALUES (
 2
,100    
,20
)

SELECT
CASE WHEN GROUPING(id) = 1
    THEN 'Total'
    ELSE id
END as ID
,CASE 
    WHEN SUM(number1) > SUM(number2)
     THEN SUM(number1)
     ELSE SUM(number2)
    END as GreaterNum
,GROUPING(id) as idgroup
FROM @table
GROUP BY id WITH ROLLUP
我的预期结果是总行将两个更大的NUM(100+200)相加,因此=300

预期结果

ID   | GreaterNum   | IDGroup
 1         200           0
 2         100           0
TOTAL      300           1
ID   | GreaterNum   | IDGroup
 1         200           0
 2         100           0
TOTAL      220           1
然而,它所做的只是对总汇总行的数字2求和

实际结果

ID   | GreaterNum   | IDGroup
 1         200           0
 2         100           0
TOTAL      300           1
ID   | GreaterNum   | IDGroup
 1         200           0
 2         100           0
TOTAL      220           1

我想我必须事先创建另一个临时表,并在那里执行case语句并将其连接以获得所需的结果,但我想知道是否有更简单的答案。

我将使用
应用

SELECT ISNULL(id, 'Total') Id, SUM(GreaterNum) GreaterNum   
FROM @table t CROSS APPLY
     ( VALUES (CASE WHEN number1 > number2 THEN number1 ELSE number2 
               END) 
     ) tt(GreaterNum)
GROUP BY id WITH ROLLUP;
但是,我只是拒绝了
GROUPING()
,这实际上不需要显示
Total