【问题标题】:WHERE IF (field depends of parameter) SQLWHERE IF(字段取决于参数)SQL
【发布时间】:2017-08-29 03:16:19
【问题描述】:

初始数据示例:

 Project   |   Field1   |   Field2    |   Field3    |
 --------------------------------------------------------------------
 Project 1 |      0     |      1      |      2      |
 Project 2 |      2     |      0      |      1      |

使用 SQL Server 2014,我有一个表,我需要在其中获取取决于 ssrs 参数值的数据。查询示例。

Select *
Where IF@Scenario=1, then Field1 < 2
      IF@Scenario=2, then Field2 < 2
      IF@Scenario=3, then Field3 < 2
From Table1

【问题讨论】:

  • 请告诉我们您的预期输出是什么。

标签: sql sql-server reporting-services sql-server-2014


【解决方案1】:
Select *
FROM x
Where 
      2 > 
      CASE @Scenario WHEN 1 THEN Field1 
           WHEN 2 THEN Field2
           WHEN 3 THEN Field3
           ELSE 0 --This part is just to avoid errors when scenario isnt in any of the options. 2>0 will display everything
      END

将条件 (2) 与列进行比较。

【讨论】:

  • 在这种情况下是否可以使用多个字段?示例如下:WHEN 1 THEN 字段 1 和 Field2 WHEN 2 THEN 字段 3 和 Field4 等。
  • 没有。您必须为此在 where 子句中添加另一个条件...类似于 ....AND (2 > CASE @Scenario WHEN 3 THEN Field4 ELSE 2-1 END) (我认为使用 VALUE-1 更安全如果你的 where 条件可能是负数,而不是 0。即如果 2 可以是 -1,那么你的 else 条件将是 -1-1 (-2)
【解决方案2】:

使用AND/OR条件

Select *
From Table1
Where (@Scenario=1 and Field1 < 2) Or 
      (@Scenario=2 and Field2 < 2) Or
      (@Scenario=3 and Field3 < 2)

【讨论】:

    【解决方案3】:

    在 WHERE 子句中使用 CASE 语句:

    SELECT *
    FROM Table1
    WHERE CASE @Scenario WHEN 1 THEN Field1 
           WHEN 2 THEN Field 2
           WHEN 3 THEN Field 3
           ELSE 0 END < 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多