sql - SQL 中基于所选选项的条件 Where 子句

标签 sql sql-server reporting-services

SQL Server 的新手,尝试编写一个查询,根据呈现给报表用户的选项更改 where 语句。我想选择一个位置并查看该位置的项目是否符合特定条件。标准根据位置而变化。我对每个选项都有工作查询,但想使用一个报告来检查每个位置。

SELECT
  Stuff
FROM
  Table1 
  INNER JOIN Table2
    ON Table1.ID = Table2.ID
WHERE
  Table2.DefaultIPGateway0 LIKE N'10.'+(@Site)+'.%'
  AND Table2.IPAddress0 LIKE N'10.%' 
  Case
    When (@Site) = "1" Then AND Table1.Name0 NOT LIKE N'ABC%' AND Table1.Name0 NOT LIKE N'ABD%'
    When (@Site) = "2" Then AND Table1.Name0 NOT LIKE N'EFG%'
    When (@Site) = "3" Then AND Table1.Name0 NOT LIKE N'HIJ%' AND Table1.Name0 NOT LIKE N'STU%' AND Table1.Name0 NOT LIKE N'MNO%'
  End

最佳答案

您的查询不是有效的 SQL 语句,如果您想要使用 CASE 的 where 条件,您可以像下面这样更改您的查询。

SELECT Stuff
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID
WHERE Table2.DefaultIPGateway0 LIKE N'10.' + @Site + '.%'
    AND Table2.IPAddress0 LIKE N'10.%'
    AND (
        CASE 
            WHEN @Site = '1'
                AND Table1.Name0 NOT LIKE N'ABC%'
                AND Table1.Name0 NOT LIKE N'ABD%'
                THEN 1
            WHEN @Site = '2'
                AND Table1.Name0 NOT LIKE N'EFG%'
                THEN 1
            WHEN @Site = '3'
                AND Table1.Name0 NOT LIKE N'HIJ%'
                AND Table1.Name0 NOT LIKE N'STU%'
                AND Table1.Name0 NOT LIKE N'MNO%'
                THEN 1
            ELSE 0
            END
        ) = 1

关于sql - SQL 中基于所选选项的条件 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60275019/

相关文章:

sql-server - SQL - 根据列合并连续的日期行

c# - .NET Core 2 C# - SQL Azure 时间点还原

mysql - 为什么MySQL的最大时间限制是838 :59:59?

mysql - 具有多个左连接的 SQL

sql - @table变量或#temp表: Performance

sql - T-SQL,如何执行此分组查询?

python - 将字典插入到在 Python 中使用 JSON 创建的 SQL 数据库中

powershell - PowerShell 可以编写 SQL Server Reporting Services RDL 文件的脚本吗?

MySQL/SQL Server...作为一个完整的解决方案协同工作

SQL,检查行是否在另一个表中