[英]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.