从Case语句返回INT

时间:2015-07-06 18:11:28

标签: sql sql-server case

我正在尝试创建一个名为Flag的行,它将保留Value超过2时的计数。稍后我将需要将flag作为计数。

我目前有:

CASE 
WHEN Value > 2
    THEN  1
ELSE  0
END AS 'Flag',

CASE 
    WHEN 'Flag' = 1  
        THEN 1
    ELSE 0
END AS 'FollowedUpCorrectly'

我收到错误:

  

将varchar值'Flag'转换为数据时转换失败   输入int。

如何强制1或0成为INT以便以后进行数学运算?

我环顾四周,似乎无法找到合适的方式。

4 个答案:

答案 0 :(得分:2)

为了能够在选择中使用以前创建的列,您需要使用例如外部应用,例如:

select
  *
from table1
outer apply (
  select CASE WHEN Value > 2 THEN  1 ELSE 0 END AS Flag
) X
outer apply (
  select CASE WHEN X.Flag = 1 THEN 1 ELSE 0 END AS FollowedUpCorrectly
) Y

在{{ 3}}

答案 1 :(得分:1)

我可能会误解你的目标。

CASE 
WHEN Value > 2
    THEN  1
ELSE  0
END AS 'Flag',

CASE 
    WHEN 'Flag' = 1  
        THEN 1
    ELSE 0
END AS 'FollowedUpCorrectly'

如果这两行位于同一代码块中,则第二个案例陈述中未知'Flag'

更新:正如Siyual指出的那样,Flag是一个字符串文字。尝试将名称更改为非保留字的内容。

答案 2 :(得分:1)

您可以使用CTE或子查询来创建标志,然后根据需要在外部查询中执行您的case语句,如下所示:

mv: ‘opencv_calib3d.so2410.so’ and ‘opencv_calib3d.so2410.so’ are the same file
mv: ‘opencv_contrib.so2410.so’ and ‘opencv_contrib.so2410.so’ are the same file
mv: ‘opencv_core.so2410.so’ and ‘opencv_core.so2410.so’ are the same file
...

答案 3 :(得分:0)

您正在将字符串('Flag')与int(1)进行比较。也许你打算引用你命名为'Flag'的第一个案例。如果是这样,请尝试在不使用单引号的情况下引用它。然后分析器将识别它并接受它作为int,它就是。但'Flag'是一个字符串。 Flag是一个int。