Sql 根据两个字段在记录之间进行1:1的匹配,然后将它们分组?
我有两张这样的桌子:Sql 根据两个字段在记录之间进行1:1的匹配,然后将它们分组?,sql,tsql,Sql,Tsql,我有两张这样的桌子: Date Client Amount | table x 123 abc 123 456 abc 987 234 xyz 567 Date Client Amount | table y 123 abc 234 921 lka 981 234 xyz 123 在我的查询中,我想显示: 123 abc 123 | (from x) 12
Date Client Amount | table x
123 abc 123
456 abc 987
234 xyz 567
Date Client Amount | table y
123 abc 234
921 lka 981
234 xyz 123
在我的查询中,我想显示:
123 abc 123 | (from x)
123 abc 234 | (from y)
234 xyz 567 | x
234 xyz 123 | y
在没有“合作伙伴”的情况下省略所有记录。这在TSQL中可能吗
SELECT a.[Date] , a.[Client] , a.[Amount], 'X' [table]
FROM tableX a INNER JOIN tableY b
ON a.[DATE] = b.[DATE] AND
a.[Client] = b.[Client]
UNION
SELECT a.[Date] , a.[Client] , a.[Amount], 'Y' [table]
FROM tableY a INNER JOIN tableX b
ON a.[DATE] = b.[DATE] AND
a.[Client] = b.[Client]
ORDER BY [DATE], [Table]
create table tablex (Date int, Client char(3), Amount int);
insert tablex select
123 ,'abc', 123 union all select
456 ,'abc', 987 union all select
123 ,'abc', 919 union all select
234 ,'xyz', 567;
create table tabley (Date int, Client char(3), Amount int);
insert tabley select
123 ,'abc', 234 union all select
123 ,'abc', 867 union all select
921 ,'lka', 981 union all select
234 ,'xyz', 123;
**Results**
date client amount from_
----------- ------ ----------- -----
123 abc 123 x
123 abc 919 x
123 abc 234 y
123 abc 867 y
234 xyz 567 x
234 xyz 123 y
可接受解决方案的替代方案
请注意,如果其中一个/两个表中有多个匹配项,则“x”中的所有结果将在“y”中的匹配项之前列出。e、 g
create table tablex (Date int, Client char(3), Amount int);
insert tablex select
123 ,'abc', 123 union all select
456 ,'abc', 987 union all select
123 ,'abc', 919 union all select
234 ,'xyz', 567;
create table tabley (Date int, Client char(3), Amount int);
insert tabley select
123 ,'abc', 234 union all select
123 ,'abc', 867 union all select
921 ,'lka', 981 union all select
234 ,'xyz', 123;
**Results**
date client amount from_
----------- ------ ----------- -----
123 abc 123 x
123 abc 919 x
123 abc 234 y
123 abc 867 y
234 xyz 567 x
234 xyz 123 y
您的解决方案不那么直观,但更加通用。谢谢您的解决方案不那么直观,但更加通用。谢谢