访问T-SQL中的别名字段

时间:2011-02-08 11:16:29

标签: sql tsql

在查询中,我使用CASE表达式创建了许多字段。

我需要稍后在查询中引用这些字段,但似乎我无法使用其别名访问该字段 - 每次我想引用其值时,我都必须重复CASE表达式。

是否有一种简单的方法可以访问这些字段?

3 个答案:

答案 0 :(得分:5)

您可以使用CTE(假设SQL Server 2005+),就像这个非常基本的示例:

DECLARE @Val INT
SET @Val = 1

;WITH CTEExample AS
(
SELECT CASE @Val WHEN 1 THEN 'A' ELSE 'B' END AS MyCaseField1
)

SELECT * FROM CTEExample WHERE MyCaseField1 = 'A'

答案 1 :(得分:0)

为什么不简单地做一个子查询

例如

SELECT  foo.column
FROM    (
    SELECT
        CASE WHEN yourcase THEN 'a'
        ELSE 'b'
        END AS 'column'
    FROM    yourtable) AS foo

但这可以通过CTE(look at this answer

完成

答案 2 :(得分:0)

您也可以CROSS APPLY使用此as in this tip by Itzik Ben Gan

SELECT SalesOrderID, OrderDate, Week_Day
FROM Sales.SalesOrderHeader
  CROSS APPLY 
 (SELECT DATEPART(weekday, DATEADD(day, @@DATEFIRST - 7, OrderDate)) AS Week_Day) AS A
WHERE Week_Day NOT IN (1, 7); 

你应该知道在where子句中重用别名会使谓词不可分割但是应该谨慎使用(无论你使用的是APPLY还是CTE,这都适用)