Tsql 在Where子句或替代选项中使用别名?
我该怎么做呢?没有Where子句它就可以工作,否则使用Where子句,我会得到一个明显的错误,但这基本上就是需要做的,有人知道如何处理这个问题吗Tsql 在Where子句或替代选项中使用别名?,tsql,sql-server-2008,Tsql,Sql Server 2008,我该怎么做呢?没有Where子句它就可以工作,否则使用Where子句,我会得到一个明显的错误,但这基本上就是需要做的,有人知道如何处理这个问题吗 select ID, Name, case T.N when 1 then City1 when 2 then City2 when 3 then City3 end as City, case T.N when 1 t
select ID,
Name,
case T.N
when 1 then City1
when 2 then City2
when 3 then City3
end as City,
case T.N
when 1 then State1
when 2 then State2
when 3 then State3
end as State
from YourTable
cross join (values(1),(2),(3)) as T(N)
Where City is NOT Null
不能在WHERE子句中使用别名。重复表达式(凌乱),或者将SELECT放入子查询,然后将WHERE子句放入外部查询:
SELECT Id, Name, City, State
FROM
(
SELECT
ID,
Name,
CASE T.N
WHEN 1 THEN City1
WHEN 2 THEN City2
WHEN 3 THEN City3
END AS City,
CASE T.N
WHEN 1 THEN State1
WHEN 2 THEN State2
WHEN 3 THEN State3
END AS State
FROM YourTable
CROSS JOIN (VALUES(1),(2),(3)) AS T(N)
) T1
WHERE City IS NOT NULL
您不能在WHERE
子句中使用别名(来自SELECT
子句),因为(SELECT语句的逻辑处理顺序部分)是WHERE
,然后SELECT
:
FROM
ON
JOIN
WHERE <--
GROUP BY
WITH CUBE or WITH ROLLUP
HAVING
SELECT <--
DISTINCT
ORDER BY <--
TOP
解决方案:参见Mark Byers提出的解决方案
希望此查询的目的是,您可以修复表结构并将其转换为第一个标准形式。
SELECT h.SalesOrderID, YEAR(h.OrderDate) OrderYear
FROM Sales.SalesOrderHeader h
ORDER BY OrderYear;