0

次のような 2 つのテーブルがあります。

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 で可能ですか?

4

2 に答える 2

2
    select DISTINCT
           case when c='x' then x.date else y.date end date,
           case when c='x' then x.client else y.client end client,
           case when c='x' then x.amount else y.amount end amount,
           c from_
      from tablex x
      join tabley y on x.date=y.date and x.client=y.client
cross join (select 'x' union all select 'y') z(c)
  order by date, client, from_;

受け入れられたソリューションの代替。

いずれかまたは両方のテーブルから複数の一致がある場合、「x」からのすべての結果が「y」からの一致の前にリストされることに注意してください。例えば

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
于 2012-11-14T02:16:36.783 に答える
2
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]
于 2012-11-14T02:09:00.103 に答える