我有简单的“ Case”查询,该查询可以使用数字,但不能使用字符串?
工作正常:
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
错误是: 无效的列名“免费”。
答案 0 :(得分:2)
CASE表达式的所有结果应返回相同的数据类型,或者需要按照数据优先级进行隐式转换。在这种情况下,数字类型的优先级高于字符串数据类型。因此,您需要使用显式转换。
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时,双引号才有效。这两个问题都出现在查询中。
答案 1 :(得分:0)
您有两个问题。
SQL字符串通常用'
而不是"
括起来。 (MS Access是使用"
,但SQL Standard是'
(包括SQL Server的示例)
这给你这个...
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中这样做。您应该在报告(或您拥有的任何表示层)中完成该操作。