带有 NULL 值的 CASE WHEN 表达式 (Hiveql)

问题描述

我有以下查询

SELECT
      rv.country,coalesce(rv.client_id,client_id2) as AccountID,coalesce(c.name,rv.client_id2)  as AccountName,rv.prod_type as ProdType,CASE WHEN cs.prod_type IS NULL THEN 'UnkNown' ELSE cs.prod_type END as ProdType1,ROUND(-SUM(CASE WHEN DATEDIFF(current_date(),rv.date_time) < 90 THEN rv.sold_prods END)) as Last3Months,rv.date_time) < 180 THEN rv.sold_prods END)) as Last6Months,rv.date_time) < 360 THEN rv.sold_prods END)) as Last12Months
FROM
    commercial.sold_products rv
LEFT JOIN commercial.customer c
ON c.client_id2 = rv.client_id

LEFT JOIN 
    commercial.customer_description cs
ON
    cs.clientid = c.client_id2
    
WHERE rv.country NOT IN ('US','JP')
AND cs.prod_type = rv.prod_type
GROUP BY
      rv.country,rv.client_id,rv.client_id2,cs.prod_type,c.name,rv.prod_type;

预期输出:(当然,使用当前 # 数量的值)

enter image description here

我有 3 个 CASE WHEN 语句,它们应该代表过去 3、6 和 12 个月内已售产品的数量。但是,即使我知道我们在 22 天前向他们出售了产品(示例),一些客户也会出现 NULL 值。

我不确定这个查询有什么问题,所以如果你发现了什么,请告诉我!

还有!忽略列/表的名称,因为公司隐私问题,我更改了它们。谢谢:)

解决方法

像这样更改您的查询:

SELECT
      rv.country,coalesce(rv.client_id,client_id2) as AccountID,coalesce(c.name,rv.client_id2)  as AccountName,rv.prod_type as ProdType,CASE WHEN cs.prod_type IS NULL THEN 'Unknown' ELSE cs.prod_type END as ProdType1,ROUND(-SUM(CASE WHEN DATEDIFF(current_date(),rv.date_time) < 90 THEN rv.sold_prods END)) as Last3Months,rv.date_time) < 180 THEN rv.sold_prods END)) as Last6Months,rv.date_time) < 360 THEN rv.sold_prods END)) as Last12Months
FROM
    commercial.sold_products rv
LEFT JOIN commercial.customer c
ON c.client_id2 = rv.client_id

LEFT JOIN 
    commercial.customer_description cs
ON
    cs.clientid = c.client_id2 AND cs.prod_type = rv.prod_type
    
WHERE rv.country NOT IN ('US','JP')
GROUP BY
      rv.country,rv.client_id2),rv.client_id2,cs.prod_type,rv.prod_type;

如果不正确,您可以分享一些示例数据进行检查,我认为您应该按项目关注您的组。