2016-04-29 21 views
-1

Ich bin neu in SQL, ich benutze R die meiste Zeit. Aber die Anforderung ist, dass ich dies in SQL erfüllen

Ich habe eine Tabelle in MS SQL, wo jede Zeile ein "Aktivitätstyp" ist, der einen Wert von entweder 'A', 'B' oder 'C' hat. Ich habe insgesamt 40 Spalten und ich muss jede Zeile überprüfen, wenn die Daten korrekt sind. Ein kleines Beispiel unten hat wenige Spalten.

Die Regel ist, dass, wenn der Aktivitätstyp 'A' ist, alle Spalten, die MonitorA_ sind, einen Wert haben sollten, alles andere sollte NULL sein. Wenn der Aktivitätstyp 'B' ist, sollten alle MonitorB_-Spalten einen Wert haben, rest alle sollten NULL sein.
Im folgenden Beispiel sind Zeile 1 und Zeile 2 in Ordnung. Aber Zeile 3 und Zeile 4 haben Probleme. Das ist in Zeile 3, Aktivitätstyp ist 'B', aber es gibt einen Wert in der Spalte 'MonitorC_ID'.
Ich möchte in der Lage sein, eine neue Spalte mit einem Wert von True oder False zu erstellen, abhängig davon, ob es den Test bestanden hat.Erstellen Sie eine neue Spalte basierend auf den Werten einer anderen Spalte

| 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   | 

Antwort

2

Sie können einen Scheck Variable für jede Art von Spalte A, B oder C. erstellen Dies würde Ihnen 3 neue Felder A_Chk, B_Chk geben, und C_Chk. Wenn sie 0 sind, ist die Zeile in Ordnung, aber wenn sie eine 1 sind, dann ist die Zeile schlecht.

Um zu einem Feld zu gelangen, würden Sie einfach nach der SUMME der 3 chk Felder suchen, um Null zu sein.

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

Vielen Dank. Ich werde jetzt deine Logik versuchen. – MaxPD

+0

Sie verwenden eine case-Anweisung mit einer Bedingung anstelle einer IF, weil ... – Dresden

+0

Es hat funktioniert. Die Logik hat funktioniert. Ich habe nicht drei verschiedene Variablen für A, B und C erstellt. Eher nur eine lange verschachtelte CASE-Anweisung. Vielen Dank J Greene! Gott segne dich! – MaxPD

Verwandte Themen