【问题标题】:SQL - Retrieve records based on parameters where either parameter can be nullSQL - 根据参数检索记录,其中任何一个参数都可以为空
【发布时间】:2015-09-16 08:06:47
【问题描述】:

我有一个存储过程,它接受五个参数,其中两个可以为空 - 我们将这些参数称为 A 和 B

我想做的是根据以下逻辑选择记录。

如果参数 A 为 NULL,则只返回匹配参数 B 的记录

我知道我可以做类似以下的事情

  IF A IS NULL 
    BEGIN
    SELECT * FROM TABLE WHERE Param=B    
    END
    ELSE
BEGIN
 SELECT * FROM TABLE WHERE Param=A    
END

但是,SQL 查询比上面的要复杂得多,并且在 Proc 中会有大量复制,这是我想避免的事情

提前致谢

=================================

编辑 - 抱歉,我应该提到,在示例中,参数基于单独的列,例如

我的表由四列组成,其中两个单独的列映射到两个参数 - 下面的基本架构

身份证 人名 组ID 交货ID

在我的过程中,我想检索那些与 GroupID 匹配的记录然而在 GroupID 为空的情况下,我想返回那些匹配 DeliveryID 的记录

再次感谢

【问题讨论】:

    标签: sql sql-server stored-procedures where-clause


    【解决方案1】:

    试试

    SELECT * FROM my_table WHERE Param = COALESCE(A,B)
    

    COALESCE 会给你A 如果它不为空。否则B

    【讨论】:

      【解决方案2】:

      从功能上讲,这样的事情应该可以工作。如果任一参数为NULL,则条件变为自标识(假设groupIDdeliveryID 都不是NULL)。

      SELECT *
        FROM table_name
       WHERE groupID    = coalesce(@groupIDParameter, groupID)
         AND deliveryID = coalesce(@deliveryIDParameter, deliveryID)
      

      【讨论】:

        【解决方案3】:

        试试 ISNULL 函数:

        SELECT * FROM TABLE WHERE Param = ISNULL(B,A) 
        

        【讨论】:

          【解决方案4】:

          你也可以使用 case 语句 Case when A is Null Then B

          【讨论】:

            猜你喜欢
            • 2016-04-19
            • 1970-01-01
            • 2016-08-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多