【问题标题】:Not able to query with null values无法使用空值查询
【发布时间】:2019-05-21 09:11:25
【问题描述】:

我需要根据参数进行查询,在CASE子句中使用参数。

参数将包含这些值:contactSuccess,contactFail,notcontacted

我们有列:empCommunication,它是布尔值。它将需要 0,1,null

根据参数值,我需要运行查询。

例如:如果参数是 contactSuccess 那么 Where 子句应该是 empCommunication = 1

如果参数是contactFail,那么Where子句应该是 empCommunication = 0

以上两个场景都在使用下面的查询,但是如果失败了

参数未联系,在这种情况下应为Where子句 empCommunication 为 NULL。

请帮我解决这个问题。

SELECT
        empCategory as name,
        count(*) as value
from EmployeeRecords R
WHERE empCommunication =
    CASE ?
        WHEN 'contactSuccess' THEN  1
        WHEN 'contactFail' THEN 0
        WHEN 'notcontacted' THEN  IS NULL
     END
group by empCategory

【问题讨论】:

  • 在 WHERE 子句中使用 AND/OR 结构而不是 case 表达式通常会更好。
  • THEN NULL 而不是 THEN IS NULL

标签: sql db2 case


【解决方案1】:

使用coalesce() 覆盖参数为'notcontacted' 的情况,其值与-1 不同:

SELECT
        empCategory as name,
        count(*) as value
from EmployeeRecords R
WHERE coalesce(empCommunication, -1) =
    CASE ?
        WHEN 'contactSuccess' THEN  1
        WHEN 'contactFail' THEN 0
        WHEN 'notcontacted' THEN -1
     END
group by empCategory

【讨论】:

    【解决方案2】:

    假设您的参数是 p_param,您可以将查询更改为

    SELECT
        empCategory AS name,
        COUNT(*) AS value
    FROM EmployeeRecords
    WHERE 
        (empCommunication IS NULL AND p_param = 'notcontacted')
        OR (empCommunication = 1 AND p_param = 'contactSuccess')
        OR (empCommunication = 0 AND p_param = 'contactFail')
    GROUP BY empCategory;
    

    【讨论】:

      【解决方案3】:

      试试这个!

      SELECT
              empCategory as name,
              count(*) as value
              from EmployeeRecords R WHERE empCommunication =
      (CASE a_column_in_table
              WHEN 'contactSuccess' THEN  1
              WHEN 'contactFail' THEN 0
              WHEN 'notcontacted' THEN  NULL
              else null
       END)
      group by empCategory;`
      

      【讨论】:

      • 我累了,它不起作用,因为它需要 where empCommunication = null 而不是 empCommunication is null。问题出在参数 (?) 中,我没有得到值,我得到了一些基于我们需要修改查询的标签。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多