如何有条件地向 SQL Server 中的 WHERE 子句添加 AND 条件

Par*_*ras 7 sql sql-server

我有一个具有以下架构的表:

| ID | BUNDLE_ID | IS_ADMIN |
Run Code Online (Sandbox Code Playgroud)

我需要根据某些标准从上表中选择具有 AND 子句的数据,即

IF @FLAG = 1
    SELECT * 
    FROM TABLE A 
    WHERE A.IS_ADMIN = 1 AND BUNDLE_ID IN (3, 5)
ELSE
    SELECT * 
    FROM TABLE A 
    WHERE A.IS_ADMIN = 1 AND BUNDLE_ID IN (1, 2)
Run Code Online (Sandbox Code Playgroud)

我可以在单个查询中实现这一点吗?

das*_*ght 6

一般方法是使用布尔表达式重写查询,该表达式根据标志的值评估您需要的内容:

SELECT * FROM TABLE A WHERE A.IS_ADMIN = 1 AND ( -- Common part ...
    (@Flag=1  AND BUNDLE_ID IN(3,5))     -- IF   ...
OR
    (@Flag<>1 AND BUNDLE_ID IN(1,2))     -- ELSE ...
)
Run Code Online (Sandbox Code Playgroud)


Mit*_*tel 5

是的,这很简单。

SELECT *
FROM TABLE A
WHERE (A.IS_ADMIN = 1
        AND BUNDLE_ID IN (3,5)
        AND @FLAG = 1)
    OR (A.IS_ADMIN = 1
        AND BUNDLE_ID IN (1,2)
        AND (@FLAG <> 1 OR @FLAG IS NULL))
Run Code Online (Sandbox Code Playgroud)


Hon*_*ger 1

简单地:

SELECT * 
FROM   TABLE A 
WHERE  (A.IS_ADMIN = 1 AND BUNDLE_ID IN(3,5) AND @FLAG = 1)
   OR  (A.IS_ADMIN = 1 AND BUNDLE_ID IN(1,2) AND (@FLAG <> 1 OR @FLAG IS NULL))
Run Code Online (Sandbox Code Playgroud)