"CASE" in SQL 查询不适用于字符串值

"CASE" in SQL Query not work with string values

我有简单的“大小写”查询,可以处理数字但不能处理字符串?

它工作正常:

SELECT
OrderItem_ID,Cost,
Case
    When Cost = 0 then 555
    Else Cost
End As CostStatus
FROM
    OrderItem

没用:

    SELECT
    OrderItem_ID,Cost,
    Case
        When Cost = 0 then "Free"
        Else Cost
    End As CostStatus
    FROM
        OrderItem

错误是: 列名称无效 'Free'。

CASE 表达式的所有结果都应该return 相同的数据类型,或者需要按照数据优先级进行隐式转换。在这种情况下,数字类型的优先级高于字符串数据类型。因此,您需要使用显式转换。

SELECT
OrderItem_ID,Cost,
Case
    When Cost = 0 then 'Free'
    Else CAST( Cost AS varchar(13))
End As CostStatus
FROM
    OrderItem

编辑:我将双引号更改为 T-SQL 中的标准单引号。双引号仅在 QUOTED_IDENTIFIERS 为 OFF 时有效。提出的查询中存在这两个问题。

你有两个问题。

SQL 字符串通常由 ' 而不是 " 括起来。 (MS Access 是使用 " 的示例,但 SQL 标准是 ',包括 SQL 服务器)

这给了你这个...

SELECT
OrderItem_ID,Cost,
Case
    When Cost = 0 then 'Free'
    Else Cost
End As CostStatus
FROM
    OrderItem

但是你试图将字符串 ('free') 放在与一堆数字相同的列中:costStatus.

您希望该列是字符串列还是数字列? 不能两者都...

也许你应该有两列?您已经有了自己的 cost 列,所以也许只有 'free''not free' 作为两个可能的状态值?

SELECT
OrderItem_ID,
Cost,
Case
    When Cost = 0 then 'Free'
    Else 'Not Free'
End As CostStatus
FROM
    OrderItem

如果只是为了让您可以将报告中的 0.00 替换为单词 free,那么您不应该在 SQL 中这样做。您应该在报告 (或您拥有的任何表示层).

中执行此操作