2016-10-06 8 views
0

誰もがこのケースを使用してこの条件を書くのを助けることができます。ケースを使用する方法Then Then SQL ServerのSelectステートメント

SELECT CASE 
WHEN D.AppEmployeeID = D.ByEmployeeID AND D.CommentStatus = 'A' THEN D.CreatedOn, E.FirstName, E.LastName, D.Remarks, D.Attachment 
WHEN D.AppEmployeeID <> D.ByEmployeeID AND D.CommentStatus = 'R' THEN D.CreatedOn, E.FirstName, E.LastName, D.Remarks, D.Attachment 
FROM tbl_Conversation_History D 
INNER JOIN tbl_Employee_Master E on D.ByEmployeeID = E.EmployeeID 
WHERE D.AppEmployeeID = @EmployeeID AND D.ByEmployeeID IN (@EmployeeID, @ReportingMg, @DelegatedMgr) AND [email protected] 
AND D.Attachment IS NULL 
ORDER BY D.CreatedOn DESC 
+1

「IF」だけではないのはなぜですか? – AakashM

+4

'CASE'は*式*です。スカラー値を返す必要があります。文/解析木の任意の部分ではありません。今のところ私が見る限り、あなたは何をしようとしているのかははっきりしていません。また、WHENがどちらも真でない場合、あなたが何が起こると予想されるかは不明です。クエリの結果セットの「シェイプ」(列の数、名前、タイプ)を変更することはできません。現時点では、0または5の列を返すクエリを作成しようとしているようで、その決定は行ごとに異なりますが、意味がありません。 –

+1

また、両方の 'then'ステートメントは同じ –

答えて

0

2つのこと:

  • CASE WHENは常に(最後WHEN後、またはELSE後に存在する場合)ENDで終了する必要があります。
  • CASE WHENは、それぞれWHENの後に単一の値を返します(存在する場合はELSEの後にも)。複数の値は許可されません。

ですから、5列は、同じ条件に依存する場合は、(列ごとに1回)CASE WHEN句を5回繰り返す必要があります...または、おそらくどこか、例えばの条件を入れてWHERE句で指定します。

0

あなたのテーブル構造についてはわかりません。私の理解によると、クエリにはENDという文がありません。たとえば、CASE WHEN文を使用する方法について、以下のクエリを見てください。

CREATE TABLE tempTable(Id int, Price int) 

INSERT INTO tempTable VALUES(1,500) 
INSERT INTO tempTable VALUES(1,1500) 
INSERT INTO tempTable VALUES(1,2500) 
INSERT INTO tempTable VALUES(1,3500) 

SELECT 
CASE 
WHEN Price > 2000 THEN 'Over Priced' 
WHEN Price > 1000 THEN 'Perfectly Priced' 
ELSE 'Offer' 
END as PriceRange 
FROM tempTable 
関連する問題