2016-07-12 6 views
0

SQL Serverで以下のSQLクエリを実行しています。条件が満たされていない場合、デフォルト値をNULLとして返す必要があります。結果は、基準を満たしていない一部のレコードでNULLとして表示されるはずですが、NULLの空白スペースが得られています。SQL Serverの一部の条件でデフォルト値をNULLに戻したい

テーブルには基準を満たさない行がいくつかありますので、結果にNULLが表示されるはずです。

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

スマートな見積もりは編集できますか?これらは通常の一重引用符でなければなりません。 – sstan

+1

真のヌル値は、何が表示されているかによって空白値として表示されます。 'NULL' *文字列*が必要な場合は、一重引用符で' 'NULL ''を使用してください。 – sstan

答えて

2

ロジックが正しくありません。ここでは、アカウントにそのcase文カスケードを取って、それを修正するための方法である - つまり、ロジックは最初のマッチを選択します:

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 

注:理由CASE戻りNULL一致する条件がないELSE NULLは、冗長です。

+0

しかし明示的にするのがベストプラクティスですロジック –

+0

@ラマック。 。 。それは良い点です。それが私がそれを変更した理由です。私は明示的であることが必ずしもベストプラクティスであることに同意しない。たとえそれがこの場合に正しいことであっても。 –

関連する問題