2017-11-16 9 views
1

다섯 가지 다른 열을 반환하도록 특정 열을 평가하려고합니다. 그러나 열은 CASE 문에서 같은 표현식을 기반으로합니다.동일한 표현식을 사용하는 여러 사례 문

 CASE WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' THEN 1 
      ELSE 0 
    END AS [Invalid] , 
    CASE WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' THEN 0 
      ELSE 1 
    END AS [validMICcode] , 
    CASE WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' THEN 0 
      ELSE 1 
    END AS [validSerialNumber] , 
    CASE WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' THEN 0 
      ELSE 1 
    END AS [validFormat] , 
    CASE WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' THEN 0 
      ELSE 1 
    END AS [validProductionYear] , 

나는 패턴 다섯 번 검색 할 문제의 테이블/열을 일으키는 것 같은 느낌,하지만 난 그것을 다시 작성하는 방법을 알아낼 수 없습니다 - 또는 심지어 가능한 경우 - 하나 개의 패턴 검색을 가지고 정의 하나의 검색을 기반으로하는 열

내가 다른 변화를 시도하고있다, 그러나 나는이 문제에 대한 올바른 구문을 마련 할 수 없습니다

CASE WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' THEN 1 
      ELSE 0   
      CASE WHEN 1 THEN 1 END AS [Invalid] 
      CASE WHEN 0 THEN 0 END AS [validMICode] 
      CASE WHEN 0 THEN 0 END AS AS [validSerialNumber] 
      CASE WHEN 0 THEN 0 END AS AS [validFormat] 
      CASE WHEN 0 THEN 0 END AS AS [validProductionYear] 
    END 
+0

이 방법이 유용할까요? – scsimon

답변

0

당신은 CTE와 것을 할 수 있었다 ..

with cte as(
select *, 
CASE 
    WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' 
     THEN 1 
     ELSE 0 
END as SomeColumn) 

select *, 
      CASE WHEN SomeColumn = 1 THEN 1 END AS [Invalid] 
      CASE WHEN SomeColumn = 0 THEN 0 END AS [validMICode] 
      ... 
from cte 
+0

예, 작동했습니다. 감사. – MISNole

1

한 가지 방법 것 하위 쿼리 및 비트 NOT 수 있습니다.

select 
    result Invalid, 
    ~result validMICcode, 
    ~result validSerialNumber, 
    ~result validFormat, 
    ~result validProductionYear 
from 
(

    select 
    CASE WHEN va.HIN LIKE '%[[email protected]#$%^&*()<>?:|\;./,]%' 
     THEN CAST(1 As bit) 
     ELSE CAST(0 As bit) 
    End result 
    from ... 
) tbl