小编典典

ROLLUP功能;用列数据类型INT而不是VARCHAR的'Total'替换NULL

sql

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


阅读 259

收藏
2021-04-28

共1个答案

小编典典

测试数据

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并成功了。

2021-04-28