2016-08-02 12 views
1

Ich habe die folgende Abfrage ohne den IsNull-Operator neu geschrieben werden, da ich die Verschlüsselung für diese Spalten verwenden und IsNull wird nicht unterstützt.So verwenden Sie anstelle von IsNull

Case When Indicator = 'N' Then Null 
Else IsNull(c.email1, IsNull(E.email, ORG_Email)) End EmailAddress 
+1

Wenn Sie mehr als zwei Dinge zu vergleichen und wählen Sie die erste nicht-null, können Sie mit [coalesce] (https://msdn.microsoft.com/en-us/library/ms190349.aspx) anstatt 'isnull' mehrmals zu nennen. Ich bin mir nicht sicher, ob dir das hier helfen würde. –

Antwort

1

Hier ist, wie Sie es mit einer case Anweisung tun würde:

Case 
    when Indicator = 'N' then Null 
    when c.email1 is not null then c.email1 
    when e.email is not null then e.email 
    else ORG_Email 
end EmailAddress 

jedoch wie andere haben darauf hingewiesen, wäre eine weitere Option coalesce zu verwenden, wenn das wird für Ihre Bedürfnisse zu arbeiten. Nicht sicher, warum isnull nicht unterstützt wird.

+0

In der oben genannten Bedingung was passiert, wenn der Indikator! = 'N'? – HadoopAddict

+0

@HadoopAddict - dies sollte Ihrer bestehenden Aussage entsprechen. Wenn der Indikator! = 'N' ist, prüft er, ob das Feld 'c.email1' nicht null ist. Wenn nicht, wähle das, wenn Null, überprüfe das nächste - im Grunde denke ich daran, wenn 'if else if' ... – sgeddes

+0

oder in der obigen Antwort haben Sie vergessen, sonst am Ende jedes' then 'Anweisung zu verwenden? – HadoopAddict

2

würde ich coalesce() zu diesem Zweck vorschlagen:

(Case When Indicator = 'N' Then Null 
     Else coalesce(c.email1, E.email, ORG_Email) 
End) as EmailAddress 

Aber ich würde diesen Satz ohne else. Indicator Unter der Annahme, nie NULL:

(case when Indicator <> 'N' 
     then coalesce(c.email1, E.email, ORG_Email) 
end) as EmailAddress 
+0

Wenn "Indikator" möglicherweise null sein, überprüfen Sie dies: http: // stackoverflow .com/questions/10416789/how-to-rewrite-is-distinct-von-und-ist-nicht-distinct-from –

0

ich die unten Abfrage habe, ohne die IsNull Betreiber neu geschrieben werden, wie ich auf diesen Spalten die Verschlüsselung verwenden und IsNull nicht

unterstützt

Ich nehme an, Sie meinen, dass die Spalten c.email1 und E.email niemals null sind, aber manchmal verschlüsselte Strings enthalten, die die Abwesenheit von Daten auf eine Weise ähnlich der normalerweise von einem NULL übermittelten vermitteln. Zum Beispiel wird möglicherweise die verschlüsselte Form einer leeren Zeichenfolge verwendet. In diesem Fall können Sie ihre Werte an den verschlüsselten null-äquivalent vergleichen:

Case 
    When Indicator = 'N' Then Null 
    when c.email1 != 'some-encrypted-string-equivalent-to-null' then c.email1 
    when E.email != 'some-encrypted-string-equivalent-to-null' then E.email 
    else ORG_Email 
End EmailAddress 

natürlich, dass, dass es übernimmt ein einziger Null-äquivalent String ist, zumindest auf einer Pro-Spalte-Basis, die möglicherweise nicht der Fall sein. Wenn es dann nicht die einzigen Optionen, die ich sehe

  1. den E-Mail-Wert in der Abfrage entschlüsseln (möglicherweise über eine benutzerdefinierte Funktion) und die Bedingungen schreiben auf den entschlüsselten Werten basieren, oder

  2. geben Sie sowohl die encypted c.email1 und E.email als separate Spalten oder null für beide, wenn Indicator ist 'N', und wählen Sie, welche auf der Anwendungsseite nach der Entschlüsselung zu verwenden.

Verwandte Themen