提问者:小点点

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


我在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个答案

匿名用户

您可以定义一个字符串列表并添加您的条件,然后用一个"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) + ") ";
        
    }