当前位置: 首页 > 知识库问答 >
问题:

SQL Server:如何编写包含每个条件的不同查询的条件WHERE子句?

滕鸿畴
2023-03-14

我在StackOverflow上找到了一大堆关于条件WHERE子句的答案,但是我找不到一个对我的问题有点特殊的答案,所以我只是想寻求一些帮助。。。

我公司的网站包含所有直接写在C#代码中的SQL查询(我不喜欢,但那是另一回事)

表单中有一组复选框(目前有3个选项,但此列表可能会增加)。对于选择的每个“提供者类型”,需要向WHERE子句添加一个附加条件,但我不确定如何最好地处理这个问题。

下面是处理此问题的代码<代码>ProviderTypesCSV最多可包含3个值(0,1,2),具体取决于用户选中的选项数量:

if (!String.IsNullOrEmpty(searchOptions.ProviderTypesCSV))
{
    // values are in a csv string.  Split out the csv
    var statuses = searchOptions.ProviderTypesCSV.Split(',');

    if (statuses.Contains("0"))   //Hospitals & Facilities
    {
        strSQL += " AND (<<perform query for 'Hospitals & Facilities'>>)";
    }

    if (statuses.Contains("1"))  //Physicians and Practitioners
    {
        strSQL += " AND (<<perform query for 'Physcians and Practitioners'>>)";
    }

    if (statuses.Contains("2"))   //In-Person Visit Providers
    {
        strSQL += " AND (<<perform query for 'In-Person Visit Providers'>>)";
    }
}

当前的问题显然是,当选择多个选项时,上面的查询没有考虑在内。当选择多个选项时,条件运算符需要是“或”,而不是“和”,但我不知道如何最好地设置它而不造成混乱

只是好奇最好的设置方式。

共有1个答案

陆啸
2023-03-14

您可以定义一个字符串列表并添加您的条件,然后用一个"OR"分隔符调整每个元素,并将其用于您的AND

if (!String.IsNullOrEmpty(searchOptions.ProviderTypesCSV))
    {
        //values are in a csv string.  Split out the csv
        var statuses = searchOptions.ProviderTypesCSV.Split(',');
        
        List<string> conditions = new List<string>();

        if (statuses.Contains("0"))   //Hospitals & Facilities
        {
            conditions.Add("(<<perform query for 'Hospitals & Facilities'>>)");
        }
        if (statuses.Contains("1"))  //Physicians and Practitioners
        {
            sconditions.Add("(<<perform query for 'Physcians and Practitioners'>>)");
        }
        if (statuses.Contains("2"))   //In-Person Visit Providers
        {
            conditions.Add("(<<perform query for 'In-Person Visit Providers'>>)");
        }
        
        strSQL += " AND (" + String.Join(" OR ", list) + ") ";
        
    }
 类似资料:
  • WHERE 语句 SQL中使用where可能会有一些不安全的动态参数传入或者一些复杂的SQL语句,但是Medoo提供非常简介和安全的方法来实现这些. 基础使用 在基础使用中. 你可以使用一些符号对参数进行过滤 $database->select("account", "user_name", [ "email" => "foo@bar.com"]);// WHERE email = 'foo

  • WHERE 语句 SQL中使用where可能会有一些不安全的动态参数传入或者一些复杂的SQL语句,但是Medoo提供非常简介和安全的方法来实现这些. 基本使用 在基本使用中. 你可以使用一些符号对参数进行过滤 $database->select("account", "user_name", [ "email" => "foo@bar.com"]);// WHERE email = 'foo@ba

  • 我有一个带标记器的字段,它被点分割。搜索时,以下值为aaa。bbb将分为两个术语:aaa和bbb。 我的问题是如何编写bool查询,将包含多个条件在同一项? 例如,我想得到所有文档,其中它的字段包含一个与模糊搜索匹配的术语,但同一术语不得包含。 以下是我想要实现的一些示例: 匹配:因为它匹配模糊搜索,而不是gamil <代码>gamil。bmail//匹配:因为术语bmail与模糊搜索匹配,而不是

  • 前面介绍了如何对表数查询、更新、删除,本小节介绍如何在查询、更新、删除操作加上 WHERE 条件约束,使这些语句的操作更加准确,满足业务需求。WHERE 条件的操作符类型有如下: 符号 说明 举例 < 小于,< 左边的值如果小于右边的值,则结果为 TRUE,否则为 FALSE 如 : 满足年龄小于 18 的条件 age < 18 = 等于,= 左边的值如果等于右边的值,则结果为 TRUE,否则为

  • 问题内容: 我如何结合这两个更新语句: 问题答案: 您可以使用CASE表达式,如下所示:

  • 我编写了一个查询,用于查找特定班级中某一性别的学生人数,但我无法找到一种方法来编写可以对两种性别执行相同操作的查询。我尝试编写两次查询(针对每个性别),然后使用UNION将它们组合起来,但也无法做到这一点。 查询# 1 结果: 查询#2 结果: 我希望输出如下,最好使用一个查询: 谢谢你。