问题描述
select pd.id,[value 1] = Case
----
End,[value 2] = Case when [value 1] in ('test1','test2') Then 0
else [value 1] End
当我尝试在值 2 中使用值 1 时,我得到的列无效。是否有可能使用计算出的 [值 1] 用于 [值 2]
我目前的解决方案是为值 1 创建一个单独的 sp 或视图,但这不是我想要做的。
解决方法
您可以使用 select 语句选择 [value 1],然后编写外部查询来选择 [value 1] 和 [value 2]
SELECT [value 1],[value 2] = Case when [value 1] in ('test1','test2') Then 0
else [value 1] End
FROM
(
select pd.id,[value 1] = Case
----
End
FROM TABLENAME
)T
或者您可以在 [value 2] 的 case 语句中重复 [value 1] 的 case 语句
select pd.id,[value 1] = Case
----
End,[value 2] = Case when ( Case
----
End [value 1]) in ('test1','test2') Then 0
else ( Case
----
End [value 1]) End
,
在 SQL Server 中,您可以使用 APPLY
在 FROM
子句中定义列别名——我认为这是个好地方:
select pd.id v.value_1,(Case when value_1 in ('test1','test2') Then '0'
else value_1
End) as value_2
from pd cross apply
(values ( case . . . )
) v(value_1);
注意事项:
- 不要使用需要转义的标识符名称,因此使用
value_1
而不是value 1
。 -
value_1
似乎是字符串。case
的value_2
表达式应返回一个字符串,因此'0'
而不是0
。 - 我在表达式后使用
as
定义表别名。这是 SQL 标准,但使用=
没有任何本身错误,这是 SQL Server 特定的语法。