我在使用字符串值替换ROLLUP NULL时遇到一些问题,因为我的列数据类型是整数。
SELECT CASE
WHEN GROUPING(Column1) = 1 THEN 'Total'
ELSE Column1
END Column1, SUM(Column2) AS MySum
FROM MyTable
GROUP BY Column1 WITH ROLLUP;
我可以将数值放在:
WHEN GROUPING(Column1) = 1 THEN '9999'
但如果value为NULL,则无法弄清楚如何转换为varchar,然后替换为'Total'。
答案 0 :(得分:2)
测试数据
DECLARE @MyTable TABLE (Column1 INT,Column2 INT)
INSERT INTO @MyTable VALUES
(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)
SELECT CASE
WHEN GROUPING(Column1) = 1 THEN 'Total'
ELSE CAST(Column1 AS VARCHAR(10)) --<-- Cast as Varchar
END Column1
, SUM(Column2) AS MySum
FROM @MyTable
GROUP BY Column1
WITH ROLLUP;
结果集
╔═════════╦═══════╗
║ Column1 ║ MySum ║
╠═════════╬═══════╣
║ 1 ║ 6 ║
║ 2 ║ 6 ║
║ 3 ║ 6 ║
║ Total ║ 18 ║
╚═════════╩═══════╝
注意强>
你无法做你想做的事情的原因是因为当你在每种情况下使用CASE
语句时,返回的数据类型应该是相同的。
在上面的查询中,我只是将colum1 CAST到varchar并且工作正常。