Sql 存在CASE语句时,汇总行未正确求和
我试图写一份报告,我99%的工作方式,除了一个列没有正确汇总。我相信我在下面复制了一个简单的版本: 代码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
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