我在用字符串值替换ROLLUP NULL时遇到一些问题,因为我的列数据类型是Integer。
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’。
测试数据
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并成功了。