2015-12-09 33 views
2

我想用case语句更改结果中的值,但似乎忽略了这一点。非常简单,如果表中的值是1那么必须更改为True,如果值为0,则必须更改为false。下面是我做的:SQL中的用例语句

CASE pbc.bShownUp 
    WHEN 0 THEN 'False' 
    ELSE pbc.bShownUp 
END 
AND 
CASE ch.bShownUp 
    WHEN 1 THEN 'True' 
    ELSE ch.bShownUp 
END 

不管我做什么,结果仍然是0或1

请帮助。

+0

您正在使用哪个数据库管理系统?你的意思是'结果仍然是0或1' - 你的意思是它显示0和1而不是真和假? – pedram

+0

请给更多的上下文:什么数据库?这个CASE位于哪里?在SELECT子句中? – marmarta

+0

什么是您的DBMS?是MS SQL Server还是其他?什么是'pbc.bShownUp'的数据类型? –

回答

5

当您使用CASE表达式时,数据的返回类型必须与所有WHEN部分相同或更简单,CASE必须解析为单一类型。

更多参考herehere

从一个类型来看,此刻的你的代码说

CASE BIT 
    WHEN 1 then NVARCHAR 
    ELSE BIT 

这是行不通的。

所以,你必须做这样的事情

CASE ch.bShownUp 
    WHEN 1 then 'TRUE' 
    ELSE 'FALSE' 
+0

案例表达。 (Case语句没有任何结果值。) – jarlh

+0

@jarlh - 好点,更新:) –

2

如果bShownUp是数字列,则会生成混合结果 - 有时为0/1,有时为“False”/“True”,例如串。我想bShownUp是VARCHAR类型,你必须将WHEN 0更改为WHEN '0'

2

如果您bShownUp是VARCHAR然后将查询应该看起来像

CASE pbc.bShownUp 
    WHEN '0' THEN 'False' 
    ELSE pbc.bShownUp 
END 

AND 

CASE ch.bShownUp 
    WHEN '1' THEN 'True' 
    ELSE ch.bShownUp 
END 

OR

尝试像下面,

CASE pbc.bShownUp 
     WHEN 0 THEN 'False' 
     ELSE CAST(pbc.bShownUp AS VARCHAR(10)) 
    END 

    AND 

    CASE ch.bShownUp 
     WHEN 1 THEN 'True' 
     ELSE CAST(ch.bShownUp AS VARCHAR(10)) 
    END 
+0

bShownUp的数据类型是位。 –

-1

我认为这会做:

case ch.bShownUp 
    when 1 then 'True' 
    else 'False' 
end