T-SQL 替换结果中的 NULL 值

Jon*_*oni 1 sql-server t-sql

我对此不知所措。实现这一目标的简单方法是什么?

我有这样的“客户”表:

USER_ID| NAME    | J_ID   |K_ID    |Y_ID
-----------------------------------------
    1  |  CUST1  |  A     |  1     |  AB
    2  |  CUST2  |  B     |  2     |  NULL
    3  |  CUST3  |  C     |  3     |  EF
    4  |  CUST4  |  NULL  |  NULL  |  GH
    5  |  CUST5  |  E     |  5     |  IJ
Run Code Online (Sandbox Code Playgroud)

然后像这样的“R_ID”表:

   R_ID  | Y_ID    
------------------
    1A9  |  AB  
    2B8  |  CD  
    3C7  |  EF  
    4D6  |  GH  
    5E5  |  IJ  
Run Code Online (Sandbox Code Playgroud)

然后像这样的“JK_ID”表:

   R_ID  | J_ID | K_ID
-----------------------
    1A9  |  A  |  1
    2B8  |  B  |  2
    3C7  |  C  |  3
    4D6  |  D  |  4
    5E5  |  E  |  5
Run Code Online (Sandbox Code Playgroud)

这就是我想得到的:

USER_ID| NAME    | J_ID   |K_ID    |Y_ID
-----------------------------------------
    1  |  CUST1  |  A     |  1     |  AB
    2  |  CUST2  |  B     |  2     |  CD
    3  |  CUST3  |  C     |  3     |  EF
    4  |  CUST4  |  D     |  4     |  GH
    5  |  CUST5  |  E     |  5     |  IJ
Run Code Online (Sandbox Code Playgroud)

所以我需要通过加入 R_ID 或 JK_ID 表来获取缺失值。但是获得该结果的最简单方法是什么,以便将空值替换为连接表中的值?

Joe*_*ish 7

实现此目的的一种方法是将LEFT OUTER JOINCOALESCE一起使用。要获取J_IDandK_ID列中的缺失值,您可以加入R_IDand JK_ID。要获取Y_ID列中的缺失值,您可以加入JK_IDR_ID

接近以下内容的东西应该可以工作:

SELECT
  cus.USER_ID
, cus.NAME
, COALESCE(cus.J_ID, r_to_jk.J_ID) AS J_ID
, COALESCE(cus.K_ID, r_to_jk.K_ID) AS K_ID
, COALESCE(cus.Y_ID, r_to_y.Y_ID) AS J_ID
FROM Customers cus
LEFT OUTER JOIN R_ID y_to_r ON cus.Y_ID = y_to_r.Y_ID
LEFT OUTER JOIN JK_ID r_to_jk ON y_to_r.R_ID = r_to_jk.R_ID
LEFT OUTER JOIN JK_ID jk_to_r ON cus.J_ID = jk_to_r.J_ID AND cus.K_ID = jk_to_r.K_ID
LEFT OUTER JOIN R_ID r_to_y ON jk_to_r.R_ID = r_to_y.R_ID;
Run Code Online (Sandbox Code Playgroud)