2016-05-16 10 views
0

WHERE句にCASEという文を使用しようとすると、エラーが発生します。私は何を取りこぼしたか?代わりにCASE文のWHERE節のCASE文私は何が欠けていますか?

SELECT DISTINCT 
     Commodity, 
     Commodity_ID, 
     [Description], 
     Train, 
     Truck 
FROM dbo.List_Commodity 
WHERE 
     CASE WHEN @Truck = 1 THEN 
      Truck = @Truck 
     WHEN @Train = 1 THEN 
      Train = @Train 
     END 
+1

T-SQLの 'CASE'は、いくつかの可能なATOMIC値のうちの一つ**を返す**式**です - **はありません**コード実行を処理するための制御フローステートメント... –

+0

@marc_s - 現在の間違いを説明する方法について考えています。ありがとうございました! –

答えて

0

あなたは@Truck@Train両方が1に等しくないとき、すべてのレコードを検索したい場合は、その後上記に以下の条件を追加し、この

SELECT DISTINCT commodity, 
       commodity_id, 
       [description], 
       train, 
       truck 
FROM dbo.list_commodity 
WHERE (@Truck = 1 
     AND truck = @Truck) 
     OR (@Train = 1 
      AND train = @Train)  

を行うにはAND/ORロジックを使用クエリ

 OR (@Train <> 1 
      AND @Train <> 1)  
+0

遅れてごめんなさい。ええ、元々は似たようなものがあったと思いますが、私が解決策をゴーグルにしたときには誰もがケースステートメント – Holmes

0

もしあなたが期待しているのであれば、THEN truck = @Truck w戻り値trueまたはfalse MS SQLにブール型データ型がなくブール式がないことが分かりません。それでもCASEステートメントを使用したい場合は

0

、次のクエリでは、参考にすることができ:

DECLARE @Truck INT = 1 -- 1 is an example 
DECLARE @Train INT = 1 -- 1 is an example 

SELECT DISTINCT 
     Commodity, 
     Commodity_ID, 
     [Description], 
     Train, 
     Truck 
FROM dbo.List_Commodity 
WHERE 1 = 
     (
      CASE 
       WHEN @Truck = 1 AND Truck = @Truck THEN 1 
       WHEN @Train = 1 AND Train = @Train THEN 1 
      END 
     ) 

P.Sは:CASE文はここでしかそれを比較すべき値を返すことに注意してください。

関連する問題