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

本质上,我查找并返回LUT2。CATNUM 代表 PNUM 和 LUT2。CNUM 的 CATNUM 基于 TB1 上的查找。P=LUT2。RNUM 和 TB1。PR=LUT2.RREV 和 TB1。C=LUT2。RNUM 和 TB1。PR=LUT2.RREV

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

像这样:

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;

最新更新