简体   繁体   English

合并或加入两个表 SQL 服务器

[英]Merge or join two tables SQL Server

I have a table with two columns Item , Qty and another table with Product , Quantity .我有一个包含两列ItemQty的表,另一个包含ProductQuantity的表。

Table A表A

Item物品 Qty数量
a一种 10 10
a一种 15 15
a一种 5 5个
b b 10 10

Table b表b

Product产品 Quantity数量
a一种 10 10
a一种 20 20
b b 5 5个
b b 5 5个

The output that I'm looking for is this:我要找的output是这个:

item物品 Qty数量 Product产品 Quantity数量
a一种 10 10 a一种 10 10
a一种 15 15 a一种 20 20
a一种 5 5个 NULL NULL NULL NULL
b b 10 10 b b 5 5个
NULL NULL NULL NULL b b 5 5个

You will need to have some sort of order to guarantee consistent results.您将需要某种顺序来保证一致的结果。 To simulate that, I added IDENTITY columns为了模拟这一点,我添加了 IDENTITY 列

Match Product to Item in Order Based on ROW_NUMBER()根据 ROW_NUMBER() 将产品与订单中的项目匹配

DROP TABLE IF EXISTS #Table1
DROP TABLE IF EXISTS #Table2

CREATE TABLE #Table1 (ID INT IDENTITY(1,1),Item CHAR(1),Qty INT)
CREATE TABLE #Table2 (ID INT IDENTITY(1,1),Product CHAR(1),Qty INT)
INSERT INTO #Table1
VALUES ('a',10)
,('a',15)
,('a',5)
,('b',10)

INSERT INTO #Table2
VALUES ('a',10)
,('a',20)
,('b',5)
,('b',5)


;WITH cte_Table1 AS (
    SELECT *,RankNum = ROW_NUMBER() OVER (PARTITION BY Item ORDER BY ID)
    FROM #Table1
),
cte_Table2 AS (
    SELECT *,RankNum = ROW_NUMBER() OVER (PARTITION BY Product ORDER BY ID)
    FROM #Table2
)
SELECT *
FROM cte_Table1 AS A
FULL JOIN cte_Table2 AS B
    ON A.Item = B.Product
    AND A.RankNum = B.RankNum

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM