【问题标题】: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'。

【问题讨论】:

    标签: sql sql-server group-by rollup


    【解决方案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 。 . .如果它回答了问题,您应该接受答案。
    • 已接受,谢谢提示,stackoverflow 的新手。
    • 没问题,欢迎来到 stackoverflow 的好地方 :)
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2012-03-10
    • 2010-09-30
    • 1970-01-01
    • 2011-03-29
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多