簡體   English   中英

具有 NULL 值的 CASE WHEN 表達式 (Hiveql)

[英]CASE WHEN expressions with NULL values (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,
    ROUND(-SUM(CASE WHEN DATEDIFF(current_date(), rv.date_time) < 180 THEN rv.sold_prods END)) as Last6Months,
    ROUND(-SUM(CASE WHEN DATEDIFF(current_date(), 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;

預期的 output :(當然是當前的#數量) 在此處輸入圖像描述

我有 3 個 CASE WHEN 語句應該代表過去 3、6 和 12 個月內售出的產品數量。 然而,一些客戶出現 NULL 值,即使我知道我們在 22 天前向他們出售了產品(示例)。

我不確定這個查詢有什么問題,所以如果你發現了什么,請告訴我!

還! 忽略列/表名稱,因為公司隱私問題,我更改了它們。 謝謝:)

像這樣更改您的查詢:

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,
    ROUND(-SUM(CASE WHEN DATEDIFF(current_date(), rv.date_time) < 180 THEN rv.sold_prods END)) as Last6Months,
    ROUND(-SUM(CASE WHEN DATEDIFF(current_date(), 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
    , coalesce(rv.client_id, rv.client_id2) 
    , rv.client_id2
    , cs.prod_type
    , coalesce(c.name, rv.client_id2)
    , rv.prod_type;

如果不正確,您可以共享一些示例數據進行檢查,我認為您應該按項目關注您的分組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM