2017-11-16 9 views
1

特定の列を評価して5つの異なる列を返そうとしていますが、列はCASE文の同じ式に基づいています。同一の式を持つ複数の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] , 

私はパターンのために5回検索される問題のテーブル/列を引き起こしているように感じるが、私はそれを書き換える方法を見つけ出すことはできません - あるいはそれも可能であれば - 1件のパターン検索を持っていると定義します1つの検索に基づいた列。

私はさまざまなバリエーションをしようとしているが、私はこの問題の正しい構文を思い付くことができません。

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

一つの方法だろう副問合せであり、Bitwise 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 
関連する問題