首页 > 解决方案 > 使用 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

标签: sqlsql-server

解决方案


一种选择是只使用从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

推荐阅读