使用SQL Server 2012.我有一个名为deals的表,其中包含一个名为deal_id的主键以及其他10个字段。我还有一个名为deals_country的表,其中包含一个名为deal_id的外键。
交易记录可能包含交易国家/地区的大量记录。我知道下面的查询将返回两个表的所有记录。
select deals .*, deals_country.* from deals inner join deals_country
on deals .deal_id = deals_country.deal_id
order by deals .deal_id
我想要做的是从交易中选择所有记录并从deals_country表中只选择一条相应的记录,从deals_country获取哪条记录无关紧要。如下所示,
Deals
deal_id other fields
MN13
MN14
MN15
MN28
Deals_Country
deal_id country
MN13 NL
MN13 FR
MN14 GB
MN14 US
MN15 US
MN28 CA
MN28 US
MN28 MX
我希望看到的结果,
deal_id country
MN13 NL
MN14 GB
MN15 US
MN28 CA
答案 0 :(得分:2)
您可以使用cross apply
:
select d.*, dc.*
from deals d cross apply
(select top 1 dc.*
from deals_country dc
where d.deal_id = dc.deal_id
) dc
order by d.deal_id;
答案 1 :(得分:1)
您可以枚举每笔交易的deals_country行并选择第一行(无论是什么):
select ...
from (
select ...
, row_number() over (partition by deals.deal_id) as rn
from deals
join deals_country
on deals.deal_id = deals_country.deal_id
) as T
where rn = 1;
未经测试,但你应该明白这个想法