sql - 使用 join on table 将州的全名更改为缩写
问题描述
我有两张表,一张叫customerAccount,一张叫state。我每天都有更多的数据被添加到这个 CustomerAccount 表中。我有多个州有全名并且应该缩写的实例。我希望能够缩写未缩写状态的位置,并且我希望它在加载表时在每个实例上都这样做。我不仅可以修复现在不正确的问题,而且还会修复稍后进入表格的问题。请通过举一些例子帮助我理解如何做到这一点
客户账户表:
RecoverDate Score City Company State
2019-02-15 1238 ATLANTA FORD GA
2019-03-23 2678 ORLANDO ACURA FLORIDA
状态表:
StateCode StateName StateID
AK ALASKA 1
AL ALABAMA 2
AR ARKANSAS 3
AZ ARIZONA 4
CA CALIFORNIA 5
CO COLORADO 6
CT CONNECTICUT 7
DE DELAWARE 8
FL FLORIDA 9
GA GEORGIA 10
IA IOWA 11
ID IDAHO 12
IL ILLINOIS 13
IN INDIANA 14
KS KANSAS 15
KY KENTUCKY 16
MD MARYLAND 17
OH OHIO 18
解决方案
一种选择是只使用从CustomerAccount
表到States
表的左连接,并有条件地用全名替换两个字母的状态代码:
SELECT
ca.RecoverDate,
ca.Score,
ca.City,
ca.Company
COALESCE(s.StateName, ca.State) AS State
FROM CustomerAccount ca
LEFT JOIN States s
ON ca.State = s.StateCode;
这里的逻辑是,如果给定的State
值与表CustomerAccount
不匹配,我们坚持当前值,否则我们拉入映射的完整状态名称。States
要获取所有缩写,请使用:
SELECT
ca.RecoverDate,
ca.Score,
ca.City,
ca.Company
COALESCE(s.StateCode, ca.State) AS State
FROM CustomerAccount ca
LEFT JOIN States s
ON ca.State = s.StateName
推荐阅读
- java - 更有效的处理方法?
- java - 使用 Parcelable 有什么好处?
- html - 我可以在 CSS Grid 中用作主网格容器吗?
- javascript - 如何使用跨度标签附加速度控制Javascript onmousemove,因此每个附加跨度标签都没有空间
- registration - 具有低(且无法识别)特征的点云注册
- java - Android Java MVC结构
- spring-boot - 在非 spring-boot 应用程序中从 spring-boot-actuator 公开缓存端点
- asp.net-mvc - 带有 Javascript 变量的 MVC Url Helper
- sql - SQL Inner Join 组合结果中的行 - 结果太少
- c - 在 execve sys_call 中处理用户 argv 的问题