2017-08-28 11 views
1

これはどうやって書けますか?異なるフィールドのケースステートメント

レコードYまたはNを保持するかどうかを判断するために、さまざまな条件のいくつかのフィールドを調べる必要があります。 (特定の基準が満たされていないレポートから一部のレコードを除外しようとしています)

この例では、ES、CQI、NAおよびCCのエイリアステーブルがあります。だから私は基本的に、これらのすべてがSD.CType値を含める

CASE 
      WHEN SD.CType = N'ALT' AND ES.SERVICE = N'Alerts' THEN 'N' 
      WHEN SD.CType = N'ALT' AND ES.SERVICE <> N'Alerts' THEN 'Y' 
      WHEN SD.CType <> N'ALT' AND ES.SERVICE <> N'Alerts' THEN 'Y' 
      WHEN SD.CType = 'BPY' AND CQI.PTYPE = 'BP' THEN 'Y' 
      WHEN SD.CType <> 'BPY' AND CQI.PTYPE = 'BP' THEN 'N' 
      WHEN SD.CType <> 'BPY' AND NA.BILL = 'Y' THEN 'Y' 
      WHEN SD.CType = 'BPY' AND NA.BILL = 'Y' THEN 'N'  
      WHEN SD.CType = 'LEN' AND CC.PTYPE <> 'CC' THEN 'Y' 
      WHEN SD.CType = 'LEN' AND CC.PTYPE = 'CC' THEN 'N' 
      ELSE 'Y' 
     END  
      AS Keep 

のようなものを必要とし、その後、彼らは他の3つのフィールドの値と組み合わせます。これを行うにはVBでSELECT CASE文を書くことができましたが、SQLで実行するにはこの必要があります。

私はどんな提案もありがとうございます。

+1

? CASE文をネストすることもできますが、これはそのままのように見えます。 – JNevill

+0

ありがとうございますJNevil、それは動作するようですが、私はそれについて明らかに非効率的なものがあるかどうか、または私は読むのが簡単な他の構文を試す必要がある場合は私は思っていた。私はすべてのケースがこれで説明されているとは確信していません。 –

答えて

3

実行中にエラーが発生していますか?はいの場合は、エラーとクエリを確認する必要があります。また、 "Else 'Y'"を定義しているので、 'Y'を識別するためにcase文にロジックを追加する必要はありません。

例:あなたが持っているものと間違っている何

CASE 
     WHEN SD.CType = N'ALT' AND ES.SERVICE = N'Alerts' THEN 'N' 
     WHEN SD.CType <> 'BPY' AND CQI.PTYPE = 'BP' THEN 'N' 
     WHEN SD.CType = 'BPY' AND NA.BILL = 'Y' THEN 'N'  
     WHEN SD.CType = 'LEN' AND CC.PTYPE = 'CC' THEN 'N' 
     ELSE 'Y' 
    END  
     AS Keep 
+2

この編集をしていただきありがとうございます。それは今よりもっと意味があります:P – xQbert

+0

私のマウスは私の指よりも速いです:D – NonProgrammer

関連する問題