我正在尝试将 BOM 分解为最低的项目。我有2张桌子。
表 A:
ITEM FORMULA
--------------------
7024 BDD39
7024 BDD94
表 B
FORMULA RAW_ITEMS
---------------------------------------
BDD94 BioxDD 94 RMW0005
BDD94 BioxDD 94 RMP0007
BDD94 BioxDD 94 RMD0010
BDD94 BioxDD 94 RMH0009
BDD39 BioxDD 39 RMA0005
BDD39 BioxDD 39 RMW0006
BDD39 BioxDD 39 RMS0005
是否有任何提示,如何将表A中的项目替换为表B中的所有3个项目?
我的预期输出是:
Item
-----------------------------------------
7024 BDD39 BioxDD 39 RMA0005
7024 BDD39 BioxDD 39 RMW0006
7024 BDD39 BioxDD 39 RMS0005
7024 BDD94 BioxDD 94 RMH0007
7024 BDD94 BioxDD 94 RMA0007
7024 BDD94 BioxDD 94 RMW0010
7024 BDD94 BioxDD 94 RMS0009
通过使用 CONCAT 函数和 INNER JOIN,您可以获得所需的输出:
SELECT CONCAT(a.Item, ' ', a.Formula) AS Item,
b.raw_items
FROM TableA a INNER JOIN TableB b
ON ( b.Formula = a.Formula )
WHERE a.Formula = 'BDD39';
或 使用而不将谷BDD39分配给公式:
SELECT Item, raw_items
FROM
(
SELECT CONCAT(a.Item, ' ', a.Formula) AS Item,
b.raw_items,
dense_rank() over (order by a.Formula) dr
FROM TableA a INNER JOIN TableB b
ON ( b.Formula = a.Formula )
) q
WHERE q.dr = 1;
SQL 小提琴演示
你所要求的只是一个内部连接,这是SQL的基础:
SELECT
A.ITEM,
A.FORMULA,
B.RAW_ITEMS
FROM
TableA A
INNER JOIN
TableB B
ON A.Formula = B.Formula
如果所有内容都必须在一列中,您只需将其连接起来即可。这是一种方法
SELECT
A.ITEM + ' ' +
A.FORMULA + ' ' +
B.RAW_ITEMS As Item
FROM
TableA A
INNER JOIN
TableB B
ON A.Formula = B.Formula
这是另一个
SELECT CONCAT(
A.ITEM, ' ',
A.FORMULA,' ',
B.RAW_ITEMS) As Item
FROM
TableA A
INNER JOIN
TableB B
ON A.Formula = B.Formula
SELECT CONCAT(ITEM, " ", TA.FORMULA, " ", RAW_ITEMS) AS ITEM
FROM TABLEA TA, TABLEB TB
WHERE TA.FORMULA = TB.FORMULA