【问题标题】:SELECTstatement with a variable WHERE带有变量 WHERE 的 SELECT 语句
【发布时间】:2014-07-29 20:09:26
【问题描述】:

我正在尝试创建一个 select 语句,其中包含一个可互换的 where 语句,我进行了 2 次尝试,但无法向您展示尝试理解我想要实现的目标

变量@holidayType 确定用户预订的假期类型,我希望它也确定运行哪个WHERE 语句

下面是我的第一次尝试

    IF @HolidayType = 'P'
        BEGIN
           WHERE    Holidays.Type <> 'A'
           AND  Holidays.Type <> 'DE'
        END
    ELSE
        BEGIN
            IF @HolidayType = 'A'
                BEGIN
                    WHERE   Holidays.Type <> 'P'
                    AND     Holidays.Type <> 'DE'
                END
            ELSE
                BEGIN
                    WHERE Holidays.status <> 'DE' 
                END
        END

下面是我的第二次尝试(更清楚一点)

    WHERE
    (
    CASE @HolidayType
        WHEN 'A' THEN (Holidays.Type <> 'P' AND Holidays.Type <> 'DE')
        WHEN 'P' THEN (Holidays.Type <> 'A' AND Holidays.Type <> 'DE')
        WHEN 'F' THEN (Holidays.status <> 'DE')
    END
    )

它们之前的选择都比较简单,只是添加了Where语句对我来说很难。

【问题讨论】:

    标签: sql-server tsql select case where


    【解决方案1】:
    WHERE
      (@HolidayType = 'A' AND Holidays.Type <> 'P' AND Holidays.Type <> 'DE')
      OR 
       (@HolidayType = 'P' AND Holidays.Type <> 'A' AND Holidays.Type <> 'DE')
      OR 
      (@HolidayType = 'F' AND Holidays.status <> 'DE')
    

    【讨论】:

      【解决方案2】:

      我提出以下解决方案。也许对于作者来说会更清楚,因为它接近他的查询:

      WHERE
          (
          CASE @HolidayType 
              WHEN 'A' THEN CASE WHEN (Holidays.Type <> 'P' AND Holidays.Type <> 'DE') THEN 1 ELSE 0 END
              WHEN 'P' THEN CASE WHEN (Holidays.Type <> 'A' AND Holidays.Type <> 'DE') THEN 1 ELSE 0 END
              WHEN 'F' THEN CASE WHEN (Holidays.status <> 'DE') THEN 1 ELSE 0 END
          END = 1
          )
      

      【讨论】:

        【解决方案3】:

        试试这个:

         WHERE (@HolidayType = 'A' AND Holidays.Type <> 'P' AND Holidays.Type <> 'DE') OR
               (@HolidayType = 'P' AND Holidays.Type <> 'A' AND Holidays.Type <> 'DE') OR
               (@HolidayType = 'F' AND Holidays.status <> 'DE')
        

        【讨论】:

        • 嗨,在此声明之后,我忘记提及将有一个附加的和声明,其中包含一些额外的规则,它是否可以合并(如 order wise 和 things)
        • 我在它似乎不工作的那一刻收到一个错误,我会在它工作时更新:) 谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-14
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        相关资源
        最近更新 更多