Sql server 在WHERE子句中添加IF条件,以便仅在特定情况下添加AND。在其他情况下,跳过“和”部分

Sql server 在WHERE子句中添加IF条件,以便仅在特定情况下添加AND。在其他情况下,跳过“和”部分,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正试着做这样的运动。这是一个示例代码,因为我无法提供整个存储过程 我从表中获取一个值,同时还获取@children作为SP的参数。仅当@children中的值大于1时,我才希望运行AND条件。是否可以在SQL Server 2008中的WHERE子句中添加IF条件?如何实现以下目标?从逻辑上讲,以下是我想要实现的情况。如果您有任何问题,请让我知道,这样我可以提供更多的信息 Select empId, empDesignation, empSalary, hasChildren from Emp

我正试着做这样的运动。这是一个示例代码,因为我无法提供整个存储过程

我从表中获取一个值,同时还获取@children作为SP的参数。仅当@children中的值大于1时,我才希望运行AND条件。是否可以在SQL Server 2008中的WHERE子句中添加IF条件?如何实现以下目标?从逻辑上讲,以下是我想要实现的情况。如果您有任何问题,请让我知道,这样我可以提供更多的信息

Select empId, empDesignation, empSalary, hasChildren from Employee Where empDesignation = 'Manager'

IF (@children > 2 )
{
AND hasChildren = 1
}

您可以将组合查询与AND或OR运算符一起使用:

Select empId, empDesignation, empSalary, hasChildren 
from Employee 
Where empDesignation = 'Manager' 
    AND (@children < 2 OR hasChildren = 1)
在这种情况下,如果@children为1或更小,则只有条件@children<2有效,因此条件hasChildren=1永远不会被计算


另一方面,如果@children大于1,则条件@children<2无效,在这种情况下,将计算条件haschilds=1。

您可以使用与and或运算符的组合查询:

Select empId, empDesignation, empSalary, hasChildren 
from Employee 
Where empDesignation = 'Manager' 
    AND (@children < 2 OR hasChildren = 1)
在这种情况下,如果@children为1或更小,则只有条件@children<2有效,因此条件hasChildren=1永远不会被计算


另一方面,如果@children大于1,则条件@children<2无效,在这种情况下,将计算条件haschilds=1。

您可以使用与and或运算符的组合查询:

Select empId, empDesignation, empSalary, hasChildren 
from Employee 
Where empDesignation = 'Manager' 
    AND (@children < 2 OR hasChildren = 1)
在这种情况下,如果@children为1或更小,则只有条件@children<2有效,因此条件hasChildren=1永远不会被计算


另一方面,如果@children大于1,则条件@children<2无效,在这种情况下,将计算条件haschilds=1。

您可以使用与and或运算符的组合查询:

Select empId, empDesignation, empSalary, hasChildren 
from Employee 
Where empDesignation = 'Manager' 
    AND (@children < 2 OR hasChildren = 1)
在这种情况下,如果@children为1或更小,则只有条件@children<2有效,因此条件hasChildren=1永远不会被计算


另一方面,@children大于1,则条件@children<2无效,在这种情况下,将对条件haschldren=1进行评估。

使用case可以如下工作:

SELECT 
    empId, 
    empDesignation, 
    empSalary, 
    hasChildren 
FROM Employee 
WHERE 
    empDesignation = 'Manager'
    AND (
        CASE
            WHEN @children <= 2 THEN 1
            WHEN @children > 2 AND hasChildren = 1 THEN 1
            ELSE 0 
        END 
        ) = 1

用例可以这样工作:

SELECT 
    empId, 
    empDesignation, 
    empSalary, 
    hasChildren 
FROM Employee 
WHERE 
    empDesignation = 'Manager'
    AND (
        CASE
            WHEN @children <= 2 THEN 1
            WHEN @children > 2 AND hasChildren = 1 THEN 1
            ELSE 0 
        END 
        ) = 1

用例可以这样工作:

SELECT 
    empId, 
    empDesignation, 
    empSalary, 
    hasChildren 
FROM Employee 
WHERE 
    empDesignation = 'Manager'
    AND (
        CASE
            WHEN @children <= 2 THEN 1
            WHEN @children > 2 AND hasChildren = 1 THEN 1
            ELSE 0 
        END 
        ) = 1

用例可以这样工作:

SELECT 
    empId, 
    empDesignation, 
    empSalary, 
    hasChildren 
FROM Employee 
WHERE 
    empDesignation = 'Manager'
    AND (
        CASE
            WHEN @children <= 2 THEN 1
            WHEN @children > 2 AND hasChildren = 1 THEN 1
            ELSE 0 
        END 
        ) = 1

我试着用“CASE”来解决这个问题。但它不起作用。如果你们愿意的话,我明天就可以把整个代码放出来。我试着用“CASE”来解决这个问题。但它不起作用。如果你们愿意的话,我明天就可以把整个代码放出来。我试着用“CASE”来解决这个问题。但它不起作用。如果你们愿意的话,我明天就可以把整个代码放出来。我试着用“CASE”来解决这个问题。但它不起作用。如果你们愿意的话,我明天就可以把整个代码发布出来。目前我正在使用第二个解决方案。这个案子对我来说真的不管用-目前我正在使用第二种解决方案。这个案子对我来说真的不管用-目前我正在使用第二种解决方案。这个案子对我来说真的不管用-目前我正在使用第二种解决方案。这个案子对我来说真的不管用-