2011-02-08 6 views
0

쿼리에서 나는 CASE 표현식을 사용하여 많은 필드를 만듭니다.T-SQL의 별칭 필드 액세스

나중에 쿼리에서이 필드를 참조해야하지만 해당 별칭을 사용하여 필드에 액세스 할 수없는 것 같습니다. 해당 값을 참조 할 때마다 CASE 식을 반복해야합니다.

이 필드에 액세스하는 간단한 방법이 있습니까?

+1

당신이 우리에게 줄 수 있습니다 (이 관계없이 APPLY 또는 CTE 사용 여부의 적용)이 where 절에 별칭을 재사용하는 것은 그러나 때문에주의해서 사용해야합니다 unsargable 술어를 렌더링 알고 있어야합니다 코드의 일부? 아마도 함수를 사용하여 문제를 해결할 수 있지만, 몇 가지 예를 들어 주면 더 쉬울 것입니다. –

답변

5

이 매우 기본적인 예제와 열팽창 계수 (SQL 서버 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' 
+0

CTE를 잘 활용하여 인생을 더 편리하게 만들어주는 훌륭한 사례입니다. –

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)

0

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); 

당신은