【问题标题】:How to remove the rows that returns 'Null' in the results in SQL Server如何在 SQL Server 的结果中删除返回“Null”的行
【发布时间】:2021-08-10 19:59:58
【问题描述】:

我有一个查询,可以根据需要为我提供结果。但我不希望在最终结果中显示“Null”的行。

SELECT DISTINCT In_Time, 
    Out_Time,
    "Duration" = CASE
                    WHEN DATEDIFF (hh,In_Time, Out_Time) >= 2 
                       THEN 'Duration was GREATER than 2 hours'
                 END  
FROM 
    CASES  C 

显示的结果:

In_Time Out_Time Duration
2021-04-01 09:05:21 2021-04-01 09:28:46 NULL
2021-04-01 09:31:37 2021-04-01 10:33:27 NULL
2021-04-01 08:56:00 2021-04-01 11:46:11 duration was GREATER than 2 hours
2021-04-02 12:50:00 2021-04-02 14:52:26 duration was GREATER than 2 hours
2021-04-02 16:10:57 2021-04-02 17:05:21 NULL

如何删除返回null的行并得到如下结果

预期结果:

In_Time Out_Time Duration
2021-04-01 08:56:00 2021-04-01 11:46:11 duration was GREATER than 2 hours
2021-04-02 12:50:00 2021-04-02 14:52:26 duration was GREATER than 2 hours

【问题讨论】:

    标签: sql sql-server-2012


    【解决方案1】:

    也许最简单的方法就是为此添加一个WHERE 子句:

    WHERE DATEDIFF (hh,In_Time, Out_Time) >= 2
    

    而在原来的SQL中:

    SELECT DISTINCT In_Time, 
            Out_Time,
            CASE
              WHEN DATEDIFF (hh,In_Time, Out_Time) >= 2 THEN 'Duration was GREATER than 2 hours'
            END AS [Duration]
      FROM  CASES C 
      WHERE DATEDIFF (hh,In_Time, Out_Time) >= 2
    

    【讨论】:

      【解决方案2】:

      我建议:

      SELECT DISTINCT In_Time, Out_Time,
            'Duration was GREATER than 2 hours' as Duration
      FROM CASES C 
      WHERE DATEDIFF(hour, In_Time, Out_Time) >= 2;
      

      不过,包含字符串 SELECT 似乎是多余的,因为所有值都相同。

      另一种方法是将DURATION 的定义放在FROM 子句中,这样您就可以在多个地方使用该值:

      SELECT DISTINCT c.In_Time, c.Out_Time, v.Duration
      FROM CASES C CROSS APPLY
           (VALUES (CASE WHEN DATEDIFF(hour, c.In_Time, c.Out_Time) >= 2
                         THEN 'Duration was GREATER than 2 hours'
                    END)
           ) v(Duration)
      WHERE v.Duration IS NOT NULL;
      

      【讨论】:

        【解决方案3】:

        感谢您的回答。

        当我使用以下查询时,我得到了答案

        SELECT DISTINCT In_Time, 
            Out_Time,
            "Duration" = 
            CASE
        WHEN DATEDIFF (hh,In_Time, Out_Time) >= 2 THEN 'Duration was GREATER than 2 hours'
            END  
            FROM CASES  C
        WHERE DATEDIFF(hour, In_Time, Out_Time) >= 2
        

        【讨论】:

          猜你喜欢
          • 2016-03-16
          • 2021-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多