3

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

4

1 回答 1

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

于 2014-02-12T21:49:52.117 回答