我正在尝试创建一个名为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以便以后进行数学运算?
我环顾四周,似乎无法找到合适的方式。
答案 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。