2010-07-06 1 views
2

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?생성 된 열이 다른 생성 된 열에 달려 있음

select 'blah' as foo, 
     CASE 
      WHEN foo='blah' THEN 'fizz' 
      ELSE 'buzz' 
     END as bar 

지금 작성된대로 invalid column name 'foo' 오류가 발생합니다. select 문을 뷰로 사용할 수있는 곳에서이 작업을 수행 할 수 있습니까?

답변

2

당신은 다음과 같은 선택 중첩을 사용할 필요가 있습니다

select foo, 
    case when foo='blah' 
    then 'fizz' 
    else 'buzz' 
    end as bar 
from (select 'blah' as foo) a 

문제가 있습니다. 같은 select 문에서 이름에 의해 열 foo가 인식되지 않는다는 것입니다.

1

열 정의를 반복하지 않으려는 경우 파생 테이블을 사용할 수 있습니다. 빠른 테스트는 세 가지 버전의 실행 계획을 보여줍니다

; 
With blahs As 
(
select 'blah' as foo 
) 


select case when foo='blah' 
    then 'fizz' 
    else 'buzz' 
end as bar 
FROM blahs 

select case when foo='blah' 
    then 'fizz' 
    else 'buzz' 
end as bar 
FROM 
(
select 'blah' as foo 
) derived 

아니면 CTE는 다음과 같은

SELECT foo, 
     CASE 
       WHEN foo='blah' 
       THEN 'fizz' 
       ELSE 'buzz' 
     END AS bar 
FROM (SELECT 
       CASE 
         WHEN [number] % 5 = 0 
         THEN 'blah' 
         ELSE 'notblah' 
       END AS foo 
     FROM [master].[dbo].[spt_values] 
     ) 
     D ; 


WITH blahs AS 
    (SELECT 
      CASE 
        WHEN [number] % 5 = 0 
        THEN 'blah' 
        ELSE 'notblah' 
      END AS foo 
    FROM [master].[dbo].[spt_values] 
    ) 
SELECT foo, 
     CASE 
       WHEN foo='blah' 
       THEN 'fizz' 
       ELSE 'buzz' 
     END AS bar 
FROM blahs 


SELECT 
     CASE 
       WHEN [number] % 5 = 0 
       THEN 'blah' 
       ELSE 'notblah' 
     END AS foo, 
     CASE 
       WHEN 
        CASE 
          WHEN [number] % 5 = 0 
          THEN 'blah' 
          ELSE 'notblah' 
        END='blah' 
       THEN 'fizz' 
       ELSE 'buzz' 
     END AS bar 
FROM [master].[dbo].[spt_values] 
0

당신은 아마도과 같이 테이블 쿼리를 사용할 수 있습니다

select a.foo, 
    case when a.foo = 'blah' 
    then 'fizz' 
    else 'buzz' 
    end as bar 
from (select 'blah' as foo) a 
1
WITH TmpTbl as (SELECT 'blah' as foo) 
SELECT foo, CASE WHEN foo='blah' THEN 'fizz' 
      ELSE 'buzz' 
      END as bar FROM TmpTbl