请求编写验证国家与州关联的Redshift SQL查询
Redshift SQL实现位置分类逻辑
数据表结构
1. COUNTRY表
| CountryCode | CountryName |
|---|---|
| USA | United States of America |
| CAN | Canada |
| IND | India |
| CHN | China |
2. STATE表
| StateName | CountryCode |
|---|---|
| California | USA |
| Texas | USA |
| Kerala | IND |
| Punjab | IND |
3. LOCATION表
| Name | StateName | CountryCode |
|---|---|---|
| Loc_01 | California | USA |
| Loc_02 | Punjab | IND |
| Loc_03 | Punjab01 | IND |
| Loc_04 | (空值) | USA |
| Loc_05 | Bihar | CHN |
| Loc_06 | California | (空值) |
分类规则
- 若LOCATION中的州名称在STATE表中存在,且对应的国家代码与STATE表映射一致,则保留原位置名称;
- 若LOCATION中的州名称在STATE表中存在,但国家代码为空,则保留原位置名称;
- 若LOCATION中的州名称在STATE表中存在,但映射的国家代码不一致,则标记为
INVALID; - 若LOCATION中的州名称在STATE表中不存在,则保留原位置名称;
- 若LOCATION中无州名称,则标记为
UNDEFINED。
Redshift SQL查询语句
SELECT l.Name, CASE -- 无州名称的情况 WHEN l.StateName IS NULL THEN 'UNDEFINED' -- 州存在但国家代码不匹配的情况 WHEN s.CountryCode IS NOT NULL AND l.CountryCode IS NOT NULL AND s.CountryCode != l.CountryCode THEN 'INVALID' -- 其他所有情况保留原名称 ELSE l.Name END AS "Derived Name" FROM LOCATION l LEFT JOIN STATE s ON l.StateName = s.StateName;
期望输出
| Name | Derived Name |
|---|---|
| Loc_01 | Loc_01 |
| Loc_02 | Loc_02 |
| Loc_03 | INVALID |
| Loc_04 | UNDEFINED |
| Loc_05 | Loc_05 |
| Loc_06 | Loc_06 |
内容的提问来源于stack exchange,提问作者Kalpit Joshi
相关产品推荐
相关产品推荐

