[英]Merge or join two tables SQL Server
I have a table with two columns Item
, Qty
and another table with Product
, Quantity
.我有一个包含两列
Item
和Qty
的表,另一个包含Product
和Quantity
的表。
Table A表A
Item![]() |
Qty![]() |
---|---|
a![]() |
10 ![]() |
a![]() |
15 ![]() |
a![]() |
5 ![]() |
b ![]() |
10 ![]() |
Table b表b
Product![]() |
Quantity![]() |
---|---|
a![]() |
10 ![]() |
a![]() |
20 ![]() |
b ![]() |
5 ![]() |
b ![]() |
5 ![]() |
The output that I'm looking for is this:我要找的output是这个:
item![]() |
Qty![]() |
Product![]() |
Quantity![]() |
---|---|---|---|
a![]() |
10 ![]() |
a![]() |
10 ![]() |
a![]() |
15 ![]() |
a![]() |
20 ![]() |
a![]() |
5 ![]() |
NULL ![]() |
NULL ![]() |
b ![]() |
10 ![]() |
b ![]() |
5 ![]() |
NULL ![]() |
NULL ![]() |
b ![]() |
5 ![]() |
You will need to have some sort of order to guarantee consistent results.您将需要某种顺序来保证一致的结果。 To simulate that, I added IDENTITY columns
为了模拟这一点,我添加了 IDENTITY 列
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.