簡體   English   中英

CASE 語句為其他列中的行返回 NULLS

[英]CASE statement returns NULLS for rows in the other columns

CASE 語句為另一列的空行返回 null。

這是我的代碼:

SELECT
    EMPLOYEE_ID,
    CASE WHEN Category = 'Ethnic_Group' THEN EMPLOYEE_ETHNICITY
        ELSE NULL
    END AS 'ethnicity',
    CASE WHEN Category = 'RACE' THEN EMPLOYEE_RACE
        ELSE NULL
    END AS 'race'
FROM EMPLMOYEE_TABLE
員工ID 種族 種族
1 非裔美國人 NULL
1 NULL 其他
1 NULL 黑色的

我想要類似的東西:

員工ID 種族 種族
1 非裔美國人 黑色的
1 非裔美國人 其他

你介意分享正在發生的事情以及你想要發生的事情嗎? 我看到種族列中有 NULL 字段。 如果您可以從種族列中走種族列(這里也沒有空值),我會這樣做:

SELECT
EMPLOYEE_ID,
CASE WHEN EMPLOYEE_RACE = 'BLACK' 
THEN coalesce(EMPLOYEE_ETHNICITY,'African-American')
    ELSE NULL
END AS 'ethnicity',

CASE WHEN EMPLOYEE_ETHNICITY='African-American' 
THEN coalesce(EMPLOYEE_RACE,'BLACK')
    ELSE NULL
END AS 'race'

FROM EMPLOYEE_TABLE

這是關於用前幾行的數據填充 NULL 孔。

我正在利用我使用的排序,按ethnicity遵循 NULLS LAST 規則。

WITH
-- your input, don't use in final query ...
employee_table(employee_id,ethnicity,race) AS (
          SELECT 1,'African-American',NULL
UNION ALL SELECT 1,  NULL            ,'OTHERS'
UNION ALL SELECT 1,  NULL            ,'BLACK'
)
-- real query starts here, replace following comma with "WITH" ...
,
holes_filled AS (
  SELECT
    employee_id
  , LAST_VALUE(ethnicity IGNORE NULLS) OVER w
  , race
  FROM employee_table
  WINDOW w AS (PARTITION BY employee_id ORDER BY ethnicity)
)
SELECT 
  * 
FROM holes_filled
WHERE race IS NOT NULL;
-- out  employee_id |    LAST_VALUE    |  race  
-- out -------------+------------------+--------
-- out            1 | African-American | OTHERS
-- out            1 | African-American | BLACK

暫無
暫無

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

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