2016-04-29 3 views
-1

Я новичок в SQL, я использую R большую часть времени. Однако это требование выполняется в SQL

У меня есть таблица в MS SQL, где каждая строка является «Тип деятельности», которая имеет значение «A», «B» или «C». У меня есть в общей сложности 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

Вы можете создать переменную проверки для каждого типа столбца A, B или C. Это даст вам 3 новых полей A_Chk, B_Chk и C_Chk. Если они равны 0, строка отлично, но если они равны 1, то строка плохо.

Чтобы попасть в одно поле, вы должны просто проверить, что значение SUM из 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

Вы используете оператор case с одним условием вместо IF, потому что ... – Dresden

+0

Это сработало. Логика сработала. Я не создавал три разные переменные для A, B и C. Скорее всего один длинный вложенный оператор CASE. Большое спасибо J Greene! Будьте здоровы! – MaxPD

Смежные вопросы