sql - 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
任何想法我应该如何处理这个?在这里,准确性优先于效率。
解决方案
像这样的东西:
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;
推荐阅读
- c# - 通过 SSL (HTTPS) 使用 HttpWebRequest
- qt - 用于绘制数据的 Qt:截取窗口然后关闭窗口
- django - 在不接触模板的情况下使用引导程序拥有外部 django 应用程序?
- reactjs - React Native - 我似乎无法让 Axios 和 AsyncStorage 在 Android 中一起工作,但代码在 iOS 上工作?
- c# - 实现接口的实体的通用配置
- mysql - mysql数据过滤
- python - glob 与 if 语句来选择哪些文件存储到一个变量?
- sql-server - SQL Server:安全地将数据移动到(维护不善的)历史表
- https - 我想把 kibana 带到 https 上。有什么方法可以做到
- python - 在 PyQt4 中动态创建/填充 QTableWidgets