2016-04-29 11 views
-1

私はSQLを使い慣れていないので、ほとんどの場合Rを使用します。しかし、私はこれをSQLで実現しています。

私はMS SQLのテーブルを持っています。それぞれの行は、 'A'、 'B'または 'C'の値を持つ 'Activity Type'です。合計40列あり、データが正しい場合はすべての行をチェックする必要があります。下の小さな例では列がほとんどありません。

アクティビティー・タイプが 'A'の場合、MonitorA_のすべての列に値を設定する必要があります。その他はすべてNULLにする必要があります。アクティビティの種類が 'B'の場合、すべてのMonitorB_列に値があり、残りのすべてがNULLである必要があります。

次の例では、行1と行2は問題ありません。しかし、行3と行4には問題があります。これは行3にあり、アクティビティタイプは 'B'ですが、 'MonitorC_ID'列に値があります。
テストに合格したかどうかによって、TrueまたはFalseの値を持つ新しい列を作成できます。別の列の値に基づいて新しい列を作成する

| Activity Type | MonitorA_ID | MonitorA_Date | MonitorA_Region | MonitorB_ID | MonitorB_Date | MonitorB_Region | MonitorC_ID | MonitorC_Date | MonitorC_Region | 
|---------------|-------------|---------------|-----------------|-------------|---------------|-----------------|-------------|---------------|-----------------| 
| B    | NULL  | NULL   | NULL   | 1   | 21/10/1985 | Brisbane  | NULL  | NULL   | NULL   | 
| A    | 45   | 25/03/1986 | Gold Coast  | NULL  | NULL   | NULL   | NULL  | NULL   | NULL   | 
| B    | NULL  | NULL   | NULL   | 67   | 13/03/1959 | Dubai   | 45   | NULL   | NULL   | 
| C    | NULL  | 13/08/1964 | NULL   | NULL  | NULL   | NULL   | 82   | 13/08/1964 | Dubai   | 

答えて

2

あなたはこれがあなたに3つの新しいフィールドA_Chk、B_Chk、およびC_Chkを与えるだろう、列A、B、またはCの種類ごとにチェック変数を作成することができます。値が0の場合は行は正常ですが、1の場合は行が不良です。

1つのフィールドに移動するには、3つのchkフィールドの合計がゼロであることを確認します。

Select 
    CASE 
     WHEN [Activity Type] = 'A' THEN 
      CASE WHEN MonitorA_ID is NULL 
       OR MonitorA_Date is NULL 
       OR MonitorA_Region is NULL 
      THEN 1 ELSE 0 END 
    END as 'A_Chk' 

From Table 
+0

ありがとうございました。私は今あなたのロジックを試してみる。 – MaxPD

+0

IFの代わりに1つの条件付きのcase文を使用しています... – Dresden

+0

これは機能しました。論理が働いた。私は、A、B、Cの3つの異なる変数を作成しませんでした。むしろ1つの長い入れ子になったCASE文です。 J Greeneありがとう!神のお恵みがありますように! – MaxPD

関連する問題