如何根据最高值

时间:2018-03-03 14:25:16

标签: sql sql-server

我目前有两张包含以下数据的表格:

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

2 个答案:

答案 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