2017-03-20 19 views
-1

私はIIFを試しました。 @ShippedDateに値がある場合は、その値だけを照会するか、他の値を照会します。where句の複数選択肢

WHERE 
    (CASE WHEN @ShippedDate != NULL THEN date_shipped = @ShippedDate 
    ELSE 
    [order].order_date BETWEEN @StartDate AND @EndDate 
    AND program_types.id IN (@ProgTypes) 
    AND employee.id IN (@RepNames) 
    END 
    ORDER BY OrderID 
+0

Caseは列の値を返すために使用される式です。このように、条件付きで他の述語を入れ替えることはできません。何もNULLに等しくなることはありません。 –

+0

'id IN(@ProgTypes)'?それはSQL Serverでも可能ですか? '@ProgTypes'はある種の配列変数ですか? –

+0

@ThorstenKettner単一の値だけが含まれている限り可能です。 ;)しかし、私は彼らがそれをやっていないと思う。 –

答えて

0

これはあなたが探しているものです。しかし、私はあなたが実際にここで行われたとは思わない。 INをスカラー値で使用していることがわかりました。これらの値にカンマで区切られたリストが含まれている場合、これはまだ機能しません。

WHERE 
(
    date_shipped = @ShippedDate --This will not be true if @ShippedDate is null 
    OR 
    (
     @ShippedDate is null 
     AND 
     [order].order_date BETWEEN @StartDate AND @EndDate 
    ) 
) 
AND program_types.id IN (@ProgTypes) 
AND employee.id IN (@RepNames) 
ORDER BY OrderID 
+0

日付を追加するとすべてのレコードが取得されます。nullを追加するとレコードはありません。私が探している論理は値がある場合です。その値を持つレコードを取得した場合は、それは残りの部分を返します。これは動作しないようです。 –

+0

おっと....私は後方にあった第2の部分にNOT NULLを持っていました。そして、ここで皆さんが推測しているように、あなたは細部の方法で多くを提供していなかったことに留意してください。 –

+0

それは働いた、私はship_dateとしてdate_shippedしたようなばかです。 TYを使用して、期待どおりに動作するようにします。 gj。 –

関連する問題