【问题标题】:SQL JOIN Returning 2 Different Fields from a Single Field With LookupSQL JOIN 通过查找从单个字段返回 2 个不同的字段
【发布时间】:2019-08-14 15:39:22
【问题描述】:

我有下表,其中基本上包含我需要的正确数据: 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 查找并返回 PNUM 的 LUT2.CATNUM 和 CNUM 的 LUT2.CATNUM =LUT2.RREV

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

【问题讨论】:

  • 使用您指定的 ON 谓词加入 LUT2 两次。

标签: sql sql-server join lookup


【解决方案1】:

类似这样的:

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;

【讨论】:

  • 在您的示例中,t1 和 t2 实际上应该是 tb1 和 tb2 吗?当我更改这些时,这似乎提供了我所追求的结果。数据库是 MS SQL。
  • 另外,上面合并的目的是什么?对于我陈述的数据,以下内容似乎是正确的:select tp.catnum as pnum, tc.catnum as cnum, tb1.qty from tb1 left join tb2 tp on tb1.p = tp.rnum and tb1.pr = tp.rrev left join tb2 tc on tb1.c = tc.rnum and tb1.cr = tc.rrev;
  • @cixelsyd 。 . .我不确定第二个表中的值是否总是匹配。 coalesce() 用于它们不匹配的情况。
猜你喜欢
  • 2013-04-06
  • 2012-04-13
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2019-05-18
  • 1970-01-01
  • 2019-12-23
相关资源
最近更新 更多