2012-12-12 11 views
6

私はビューのcase文を書くのに助けが必要です。ベーステーブルには、参照するカラムが2つあります: 'ステージ'と 'はい'です。条件付きCASE文の構文

Stageの列が1で、YesNo列が1の場合、ビューに「いいえ」と表示するにはCASE文が必要です。ステージの列が1で、YesNo列が0の場合、ビューに「はい」と表示するにはCASEステートメントが必要です。 Stage列が1で、YesNo列がNULLの場合は、ビューにNULLとして表示するにはCASE文が必要です。 Stageが1以外の場合、ビューにNULLと表示するにはYesNo列が必要です。

これはこれまでの私の論理ですが、正しいと思いますが、実行しようとすると「AS」という言葉の構文エラーが発生します。助言がありますか?あなたはELSE WHENを使用している

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    ELSE WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 
+4

することができます私はちょうど「YesOrNo」と呼ばれる列を持つと、1が「いいえ」を意味すると、私は少し泣いてしまいます。 –

+3

Mattのコメントに注意して、ネーミング/データスキームを修正することを強くお勧めします。まず、プログラミングでは、1が真を意味し、0が偽を意味する(ほぼ?)普遍的です。これを逆にすることは非常に奇妙であり、コードを読みやすく理解することが非常に困難になります。第二に、あなたのテーブル名 'YesOrNo'について言及していませんが、それは質問ではなく属性であるため、非常に良い列名ではありません。より良い名前は 'IsDeleted'か' NeedsExpressHandling'か 'HasPermission'か明らかにTrue/Falseです。 – Pondlife

答えて

6

アウトELSEを残せば、それは、残りのロジックを満たしていない項目についてnullを返します、ELSE WHENを削除します。

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 

または使用:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
    ELSE 'other' 
END AS NewViewColumn 
+0

ありがとう皆さん、すぐに私の問題を解決しました。 – dp3

1

、これはELSEまたはWHEN .. THEN ..のいずれかでなければなりません:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    ELSE 'Yes' 
END AS NewViewColumn 

または:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 

詳細についてはmsdn page on CASEをチェックしてください。

2
CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
    ELSE something else -- If you ignored this it will be NULL 
END AS NewViewColumn