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]
可接受解决方案的替代方案

请注意,如果其中一个/两个表中有多个匹配项,则“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
可接受解决方案的替代方案

请注意,如果其中一个/两个表中有多个匹配项,则“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

您的解决方案不那么直观,但更加通用。谢谢您的解决方案不那么直观,但更加通用。谢谢