2016-07-12 9 views
0

Ich führe die folgende SQL-Abfrage in SQL Server, wo ich einen Standardwert als 'NULL' zurückgeben muss, wenn eine Bedingung nicht erfüllt ist. Das Ergebnis sollte als NULL für einige Datensätze angezeigt werden, die die Kriterien nicht erfüllen, aber ich bekomme ein Leerzeichen anstelle von NULL.Kann jemand bitte helfen?Ich möchte einen Standardwert als NULL für eine Bedingung in SQL Server zurückgeben

Es gibt wenige Zeilen in meiner Tabelle, die die Kriterien nicht erfüllen, daher sollte ich NULL in meinem Ergebnis sehen.

SELECT NAME, 
CASE 
    WHEN AGE >=18 AND SEX='M' THEN 'Adult Male' 
    WHEN AGE>18 AND SEX='M' 'Non-Adult Male' 
    WHEN AGE >=18 AND SEX='F' THEN 'Adult Female' 
    WHEN AGE<18 AND TITLE='F' THEN 'Non-Adult Female' 
    ELSE NULL 
END AS AGE_SEX, 
ADDRESS, 
SALARY 
FROM PERSONALS; 
+1

Können Sie bitte die intelligenten Zitate bearbeiten? Das sollten normale einfache Anführungszeichen sein. – sstan

+1

Nun, Sie haben Ihre Bedingungen durcheinander gebracht, Sie haben 'SEX = 'F'' oder' SEX =' M'für einige, aber 'TITLE = 'F'für eine andere. Auch "AGE> = 18" für "Adult", aber auch "AGE> 18" für "Non Adult" – Lamak

+1

Beachten Sie, dass ein echter Nullwert als leerer Wert angezeigt wird, je nachdem, was angezeigt wird. Wenn Sie eine 'NULL' * Zeichenkette * wollen, dann verwenden Sie' 'NULL'', mit einfachen Anführungszeichen. – sstan

Antwort

2

Ihre Logik ist nicht korrekt. Hier ist ein Weg, um es zu beheben, zu berücksichtigen, dass case Aussagen Kaskade - das ist die Logik das erste Spiel wählen:

SELECT NAME, 
     (CASE WHEN AGE >= 18 AND SEX = 'M' THEN 'Adult Male' 
      WHEN AGE < 18 AND SEX = 'M' THEN 'Non-Adult Male' 
      WHEN AGE >= 18 AND SEX = 'F' THEN 'Adult Female' 
      WHEN AGE < 18 AND SEX = 'F' THEN 'Non-Adult Female' 
     END) AS AGE_SEX 

Hinweis: Die ELSE NULL ist überflüssig, da die CASE kehrt NULL, wenn keine Bedingungen Spiel .

+0

Obwohl dies höchstwahrscheinlich richtig ist, wäre es besser, wenn die Bedingungen explizit sind: "WANN ALTER <18 UND SEX = 'M" DANN "Nicht-erwachsener Mann". In Ihrer Antwort, wenn die "AGE" ist NULL und "SEX = 'M", dann wird es "Non-Adult Male" anstelle von "NULL" als op's Frage – Lamak

+0

zurückgeben Allerdings ist es beste Praxis, explizit mit zu sein die Logik –

+0

@Lamak. . . Das ist ein guter Punkt, weshalb ich es geändert habe. Ich stimme nicht zu, dass das Explizite notwendigerweise eine Best Practice ist, auch wenn es in diesem Fall richtig ist. –

Verwandte Themen