복붙노트

[SQL] SELECT 목록에서 별칭 다른 곳에서 참조

SQL

SELECT 목록에서 별칭 다른 곳에서 참조

나는 다음과 같은 쿼리를 가지고 :

    select FirstName, LastName,
    Case
     When LastName = 'Jones'
     then 'N/A'
    End as Other,
    Case 
      When Other is not null 
      then 1 
    else 0 as Flag

국기 값은 다른 중요하지만 다른 별칭처럼, 플래그 필드는 다른 인식하지 못합니다.

나는 내가 선택 내 선택을 사용할 수 같아요. 깃발이 다른 별칭 컬럼을 인식하기위한 더 좋은 방법이 있나요?

해결법

  1. ==============================

    1.당신은 방법의 쿼리 구문 분석되기 때문 의해 별명 SELECT의 외부 ORDER를 참조 할 수 없습니다. 일반적인 해결 방법은 파생 테이블에 묻어하는 것입니다 :

    당신은 방법의 쿼리 구문 분석되기 때문 의해 별명 SELECT의 외부 ORDER를 참조 할 수 없습니다. 일반적인 해결 방법은 파생 테이블에 묻어하는 것입니다 :

    SELECT 
      FirstName, LastName, Other, 
      Flag = CASE WHEN Other IS NOT NULL THEN 1 ELSE 0 END
    FROM 
    (
      SELECT FirstName, LastName,
        CASE WHEN LastName = 'Jones'
         THEN 'N/A'
        END AS Other
      FROM dbo.table_name
    ) AS x;
    
  2. ==============================

    2.또한 공통 테이블 식 (CTE)와 함께이 작업을 수행 할 수 있습니다

    또한 공통 테이블 식 (CTE)와 함께이 작업을 수행 할 수 있습니다

    ;WITH cte AS 
    (
    SELECT 
        firstname, 
        lastname, 
        CASE WHEN lastname = 'Jones' THEN 'N/A' 
        END AS Other 
    FROM @t
    ) 
    SELECT 
        firstname, 
        lastname, 
        CASE WHEN other IS NOT NULL THEN 1 
            ELSE 0 
        END AS Flag 
    FROM cte
    
  3. ==============================

    3.당신은 SELECT에 SELECT를 사용해야합니다 :

    당신은 SELECT에 SELECT를 사용해야합니다 :

    SELECT FirstName, LastName, Other, 
        Case When Other is not null 
             then 1 
             else 0 END as Flag
    FROM 
    (
        select FirstName, LastName,
            Case
             When LastName = 'Jones'
             then 'N/A'
            End as Other
        from yourTable
    ) x
    

    아니면 플래그 필드를 평가하는 기타 필드에 대한 CASE 문을 다시 사용할 수 있습니다 :

    select FirstName, 
        LastName,
        Case 
            When LastName = 'Jones'
            then 'N/A'
        End as Other,
        case when LastName = 'Jones' -- your Other CASE code here
            then 1
            else 0
        END as flag 
    from yourTable
    
  4. from https://stackoverflow.com/questions/11975749/reference-an-alias-elsewhere-in-the-select-list by cc-by-sa and MIT license