ROLLUP 函数;将 NULL 替换为 'Total' w/列数据类型 INT 而不是 VARCHAR

Posted

技术标签:

【中文标题】ROLLUP 函数;将 NULL 替换为 \'Total\' w/列数据类型 INT 而不是 VARCHAR【英文标题】:ROLLUP Function; Replace NULL with 'Total' w/ Column data type INT not VARCHARROLLUP 函数;将 NULL 替换为 'Total' w/列数据类型 INT 而不是 VARCHAR 【发布时间】:2014-02-12 21:42:08 【问题描述】:

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

但如果值为 NULL,我不知道如何转换为 varchar,然后替换为 'Total'。

【问题讨论】:

【参考方案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 转换为 varchar 并且它起作用了。

【讨论】:

@user3303623 很高兴它帮助您现在可以接受答案 :) meta.stackexchange.com/questions/5234/… @user3303623 。 . .如果它回答了问题,您应该接受答案。 已接受,谢谢提示,*** 的新手。 没问题,欢迎来到 *** 的好地方 :)

以上是关于ROLLUP 函数;将 NULL 替换为 'Total' w/列数据类型 INT 而不是 VARCHAR的主要内容,如果未能解决你的问题,请参考以下文章

分组 cube rollup NVL (expr1, expr2)

有关sql 将null值转为空串类型的函数

oracle 中grouping 函数 的使用?

ORACLE SQL:如何在 Pivot 函数中将 NULL 替换为 0

pd如何把0填充为null

我如何创建一个实用函数来检查来自 CSV 的空值并替换为打印 NULL