【问题标题】:Incompatible data types in CASE STATEMENTCASE STATEMENT 中不兼容的数据类型
【发布时间】:2014-05-31 04:50:54
【问题描述】:

我正在将 SAS 代码转换为 Cognos Report Studio 版本 10,在该版本中卡在需要数据格式化的地方。

IF SDW_STAT ^= '' THEN PRINCIPAL_BAL = TOT_PRIN;

其中 '' 代表不带空格的单引号

我试过写CASE STATEMENT

CASE 
WHEN ([SDW_STAT] IS NOT MISSING) THEN ([PRINCIPAL_BAL] = [TOT_PRIN])
ELSE ('') 
END

我还尝试了几个选项,例如 <> '', is not null, <> ' ' 而不是 IS NOT MISSING,但它们都不起作用。你能建议我哪里出错了吗? 请注意:SDW_STAT 列有几个空白字段和​​一些字符,如 'Y' 'S' 等。

【问题讨论】:

    标签: sql cognos cognos-bi cognos-10


    【解决方案1】:

    尝试将列放在CASE 语句之外:

    PRINCIPAL_BAL = 
        CASE 
            WHEN COALESCE(SDW_STAT,'') <> '' THEN TOT_PRIN 
            ELSE PRINCIPAL_BAL 
        END
    

    从逻辑上讲,当 sdw_stat 不等于空白或 null 时,这会将 principal_bal 更新为 tot_prin。如果它是空白的,那么它只会更新到自己。

    【讨论】:

    • 这也行吗?如果不是,有什么区别? 'CASE WHEN ([SDW_STAT] '') THEN ([TOT_PRIN]) ELSE ([PRINCIPAL_BAL]) END' '
    【解决方案2】:

    问题可能出在 ELSE 语句上。您的 THEN 子句是一个等式。这将返回一个布尔值,truefalse。你的 else 正在返回一个字符串。这些类型不兼容。您可以通过将 ELSE 更改为:

    ELSE (false)
    

    我的猜测是数据类型错误会消失。

    您能否详细说明您在哪里使用此代码?它是在数据项中还是在过滤器中?根据使用表达式的位置,有不同的规则。

    注意:我会直接评论这个问题,但我是新手,还没有能力。

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      相关资源
      最近更新 更多