在查询中,我使用CASE
表达式创建了许多字段。
我需要稍后在查询中引用这些字段,但似乎我无法使用其别名访问该字段 - 每次我想引用其值时,我都必须重复CASE
表达式。
是否有一种简单的方法可以访问这些字段?
答案 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,这都适用)