如何在同一 select 语句中的另一列中重用列别名?
How to reuse column alias in another column within same select statement?
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 语句 select [value 1] 然后将外部查询写入 select [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 服务器中,您可以使用 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
似乎是字符串。 value_2
的 case
表达式应该 return 一个字符串,所以 '0'
而不是 0
.
- 我在表达式后使用
as
定义了 table 别名。这是 SQL 标准,但是 本身 使用 =
没有任何错误,这是 SQL 服务器特定语法。
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 语句 select [value 1] 然后将外部查询写入 select [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 服务器中,您可以使用 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
似乎是字符串。value_2
的case
表达式应该 return 一个字符串,所以'0'
而不是0
.- 我在表达式后使用
as
定义了 table 别名。这是 SQL 标准,但是 本身 使用=
没有任何错误,这是 SQL 服务器特定语法。