我目前有两张包含以下数据的表格:
TableA
**ID** | **Item**
1 | Hat
2 | Coat
3 | Jacket
TableB
**ID** | **TableA ID** | **Store** | **Quantity**
1 | 1 | A | 3
2 | 1 | B | 2
3 | 1 | C | 1
4 | 2 | A | 2
5 | 2 | B | 4
6 | 2 | C | 3
7 | 3 | A | 1
8 | 3 | B | 2
9 | 3 | C | 6
我正在尝试使用TableA.ID,TableA.Item,TableB.Store将这两个表连接为三个返回的列。但是,我只想显示最高'数量的商店(本例中的A,B或C)。值。
例如。查询的最终结果如下:
**TableA.ID** | **TableA.Item** | **TableB.Store**
1 | Hat | A
2 | Coat | B
3 | Jacket | C
答案 0 :(得分:1)
使用row_number()
:
select a.id, a.item, b.store
from a join
(select b.*,
row_number() over (partition by tableaid order by quantity desc) as seqnum
from b
) b
on a.id = b.tableaid
where b.seqnum = 1;
我可以补充一点,使用相关子查询会更有效:
select a.*, b.shop
from a cross apply
(select top 1 b.*
from b
where a.id = b.tableaid
order by b.quantity desc
) b;
两个查询都可以利用b(tableaid, quantity)
上的索引。
答案 1 :(得分:1)
使用row_number():
非常简单select *
from ( select *
, row_number() over (partition by [TableA ID] order by Quantity desc) as tn
from tableA a
join tableB b
on a.ID = b.[TableA ID]
) tt
where tt.rn = 1