【问题标题】:Use of case statement within where clause with two columns在带有两列的 where 子句中使用 case 语句
【发布时间】:2017-06-11 16:14:24
【问题描述】:

当应用以下条件时,关于如何过滤下表中的行的任何建议/想法都会很棒。在此先感谢

条件 1:Effective_date 是 08/01/2017 或之前,那么我需要所有的 ID,当他们的 UABP 是 NULL/空白/任何非零值/ 零

条件 2:Effective_date > 08/01/2017 时,我需要应用过滤器并仅选择具有 UABP > 0 的 ID 并忽略其他记录。

初始查询:

注意:我在结果表的 UABP 和 Eff_date 列中包含以显示其数据的概念,但我不希望它们在我的查询中

SELECT 
    MAX(id_num) [ID], Submission_Num 
FROM 
    [Fiduciary] 
GROUP BY 
    Submission_Num

修改后的查询,但无法得到预期的结果:

--edited corrected one for fidicuary standalone when effective date greater than 08/01
SELECT 
    MAX(id_num) [ID], Submission_Num 
FROM 
    [Fiduciary] 
WHERE
    UABP <> '' OR UABP IS NOT NULL OR UABP <> 0 
    AND  Effective_Date >  '08/1/2017'
GROUP BY 
    Submission_Num

原表

+---+--------------------+-------------+-----------------+
|ID |    Submission_Num  | UABP        | Effective_date  |
+---+--------------------+-------------+-----------------+
| 1 | 12121121           | NULL        |  07/1/2017      | 
| 2 | 65662656           | 565         |  06/1/2017      |   
| 6 | 24646426           |             |  05/1/2017      |    
| 3 | 12652354           | 0           |  06/1/2017      |      
| 8 | 56566565           | 232         |  08/02/2017     |   
| 9 | 65665656           | NULL        |  08/02/2017     | 
| 10| 76358928           | 0           |  09/02/2017     | 
+---+--------------------+-------------+---------------- +

预期结果:

+---+--------------------+-------------+-----------------+
|ID |    Submission_Num  | UABP        | Effective_date  |
+---+--------------------+-------------+-----------------+
| 1 | 12121121           | NULL        |  07/1/2017      | 
| 2 | 65662656           | 565         |  06/1/2017      |   
| 6 | 24646426           |             |  05/1/2017      |    
| 3 | 12652354           | 0           |  06/1/2017      |      
| 8 | 56566565           | 232         |  08/02/2017     |   
+---+--------------------+-------------+---------------- +

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    根据您的问题,我认为您的标准正确,但我并没有完全遵循您的 UABP 为零或不为零,因此您可能需要更改该标准以适合您的解决方案。

    SELECT Max(id_num) [ID], Submission_Num FROM [Fiduciary] 
    WHERE Effective_Date <= '08/1/2017' AND UABP = '' 
       OR Effective_Date <= '08/1/2017' AND UABP IS NULL 
       OR Effective_Date <= '08/1/2017' AND UABP >= 0 
    OR    Effective_Date > '08/1/2017' AND UABP > 0
    GROUP BY Submission_Num
    ORDER BY Submission_Num
    

    重点是,我将其分解为多组 OR/AND 语句。

    【讨论】:

      【解决方案2】:

      去做吧

      SELECT Max(id_num) [ID], Submission_Num FROM [Fiduciary] 
      where Effective_Date <= '08/1/2017' or Effective_Date >  '08/1/2017' and UABP>0
      GROUP BY Submission_Num
      

      【讨论】:

        【解决方案3】:

        我会将查询写成:

        SELECT Max(id_num) as ID, Submission_Num
        FROM [Fiduciary] f
        WHERE (Effective_Date < '2017-08-01' AND
               (UABP IS NULL OR USABP IN (0)
              ) OR
              (Effective_Date >= '2017-08-01' AND
               UABP > 0
              ) ;
        

        根据您对问题的描述,我不确定UABP 是数字还是字符串。如果是字符串,则在常量周围加上单引号。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-14
          • 1970-01-01
          • 2017-06-19
          • 2018-07-04
          • 1970-01-01
          • 2014-09-08
          相关资源
          最近更新 更多