Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在同一select语句中的另一列中重用列别名?_Sql_Sql Server_Powerbi_Column Alias - Fatal编程技术网

Sql 如何在同一select语句中的另一列中重用列别名?

Sql 如何在同一select语句中的另一列中重用列别名?,sql,sql-server,powerbi,column-alias,Sql,Sql Server,Powerbi,Column Alias,当我尝试在值2中使用值1时,得到的列无效。是否有可能在[值2]中使用计算出的[值1] select pd.id ,[value 1] = Case ---- End ,[value 2] = Case when [value 1] in ('test1', 'test2') Then 0 else [value 1] End SELECT [va

当我尝试在值2中使用值1时,得到的列无效。是否有可能在[值2]中使用计算出的[值1]

select pd.id
       ,[value 1] = Case
                    ----
                    End
       ,[value 2] = Case when [value 1] in ('test1', 'test2') Then 0
                    else [value 1] End
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

我目前的解决方案是为值1创建一个单独的sp或视图,但我不想这样做。

您可以使用select语句选择[value 1],然后编写外部查询来选择[value 1]和[value 2]

select pd.id
       ,[value 1] = Case
                    ----
                    End
       ,[value 2] = Case when [value 1] in ('test1', 'test2') Then 0
                    else [value 1] End
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 [value 1] in ('test1', 'test2') Then 0
                    else [value 1] End
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

在SQL Server中,可以使用APPLY在FROM子句中定义列别名-我认为这是一个好地方:

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
注:

不要使用需要转义的标识符名称,因此使用值_1而不是值1。 值_1似乎是字符串。值_2的大小写表达式应返回字符串,因此“0”而不是0。 我在表达式后使用as定义表别名。这是SQL标准,但使用=(SQL Server特有的语法)本身并没有错。
您使用的是MySQL还是MS SQL Server?答案是不,不是您尝试的方式。重复大小写表达式,或者让派生表或cte返回值1。如上所述,您不能从另一个计算列引用计算列-您可以使用视图。