首页 > 解决方案 > SQL JOIN 通过查找从单个字段返回 2 个不同的字段

问题描述

我有下表,其中基本上包含我需要的正确数据:TB1:

P   PR  C   CR  QTY
--  --  --  --  ---
Z   01  C   02  14
X   02  D   01  1
Q   03  Z   01  22
D   01  S   04  9   

我需要做的是将 P+PR 和 C+CR 列替换为我从查找表中获取的每一列:LUT2:

CATNUM  R   RNUM    RREV
------  --  ----    ----
Z-01    01  Z       01
X       02  X       02
Q-03    03  Q       03
D       01  D       01
C-02    02  C       02
S-04    04  S       04

我追求的结果如下:

PNUM    CNUM    QTY
----    ----    ---
Z-01    C-02    14
X       D       1
Q-03    Z-01    22
D       S-04    9

本质上,我根据 TB1.P=LUT2.RNUM AND TB1.PR=LUT2.RREV 和 TB1.C=LUT2.RNUM AND TB1.PR=LUT2 查找并返回 PNUM 的 LUT2.CATNUM 和 CNUM 的 LUT2.CATNUM。 RREV

任何想法我应该如何处理这个?在这里,准确性优先于效率。

标签: sqlsql-serverjoinlookup

解决方案


像这样的东西:

select coalesce(tp.catnum, t1.p) as p,
       coalesce(tc.catnum, t1.c) as c,
       t1.qty
from tb1 left join
     tb2 tp
     on t1.p || '-' || t1.pr = tp.catnum left join
     tb2 tc
     on t1.c || '-' || t1.cr = tc.catnum;

您尚未指定您正在使用的数据库,因此它使用标准运算符||进行字符串连接。

编辑:

哦,我看到值在其他列中:

select coalesce(tp.catnum, t1.p) as p,
       coalesce(tc.catnum, t1.c) as c,
       t1.qty
from tb1 left join
     tb2 tp
     on t1.p = tp.rnum and t1.pr = tp.r left join
     tb2 tc
     on t1.c = tc.rnum and t1.cr = tc.r;

推荐阅读