2016-04-29 109 views
-1

我是SQL新手,大部分時間使用R。然而,我的要求是我在SQL中履行這一點

我在MS SQL中有一個表,其中每行是一個「活動類型」,其值爲'A','B'或'C'。我總共有40列,如果數據正確,我需要檢查每一行。下面的一個小例子有幾列。

規則是如果活動類型是'A',那麼所有MonitorA_的列應該有一個值,其他的都應該是NULL。如果Activity類型爲'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,那麼這行很糟糕。

要獲得一個字段,您只需檢查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的case語句,因爲... – Dresden

+0

它工作。邏輯起作用。我沒有爲A,B和C創建三個不同的變量,而只是一個長嵌套的CASE語句。非常感謝J Greene!上帝祝福你! – MaxPD