1. ホーム
  2. sql

[解決済み] SQL Server の条件付き WHERE 句

2022-03-02 19:12:38

質問

SQLクエリを作成しているのですが、その中で、条件付きで where 節があります。

こんな感じになるはずです。

SELECT 
    DateAppr,
    TimeAppr,
    TAT,
    LaserLTR,
    Permit,
    LtrPrinter,
    JobName,
    JobNumber,
    JobDesc,
    ActQty,
    (ActQty-LtrPrinted) AS L,
    (ActQty-QtyInserted) AS M,
    ((ActQty-LtrPrinted)-(ActQty-QtyInserted)) AS N
FROM 
    [test].[dbo].[MM]
WHERE 
    DateDropped = 0
            --This is where i need the conditional clause 
    AND CASE
            WHEN @JobsOnHold = 1 THEN DateAppr >=  0
            ELSE  DateAppr != 0
        END

上記のクエリがうまくいきません。これは正しい構文ではないのでしょうか、それとも私の知らない別の方法があるのでしょうか?

ダイナミックSQLは使いたくないので、他の方法はないのか、それとも if else というクエリを作成し、同じクエリで異なる where の節は?

どのように解決するのですか?

これを試してみてください

SELECT 
    DateAppr,
    TimeAppr,
    TAT,
    LaserLTR,
    Permit,
    LtrPrinter,
    JobName,
    JobNumber,
    JobDesc,
    ActQty,
    (ActQty-LtrPrinted) AS L,
    (ActQty-QtyInserted) AS M,
    ((ActQty-LtrPrinted)-(ActQty-QtyInserted)) AS N
FROM 
    [test].[dbo].[MM]
WHERE 
    DateDropped = 0
    AND (
    (ISNULL(@JobsOnHold, 0) = 1 AND DateAppr >= 0) 
    OR 
    (ISNULL(@JobsOnHold, 0) != 1 AND DateAppr != 0)
    )

条件付きWHEREについては、こちらで詳しく解説しています。