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)