ROLLUP功能;将NULL替换为'Total'w / Column数据类型INT not VARCHAR

时间:2014-02-12 21:42:08

标签: sql sql-server group-by rollup

我在使用字符串值替换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'。

1 个答案:

答案 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并且工作正常。