我有下表,其中包含我需要的基本正确数据: 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;