Sql server 一对多返回单行

Sql server 一对多返回单行,sql-server,Sql Server,MS SQL: 表一:路由——表二:站点(使用int字段[seq]获取站点序列,键字段ID) 如何将[routes]加入[stops]表,并仅将第一条和最后一条路线返回到一行中 假设我做了一个简单的连接: Route 1 | Stop 1 Route 1 | Stop 2 Route 1 | Stop 3 Route 2 | Stop 1 Route 2 | Stop 2 我希望它能返回: Route 1 | Stop 1 | Stop 3 Route 2 | Stop 1 | Stop 2

MS SQL:

表一:路由——表二:站点(使用int字段[seq]获取站点序列,键字段ID)

如何将[routes]加入[stops]表,并仅将第一条和最后一条路线返回到一行中

假设我做了一个简单的连接:

Route 1 | Stop 1
Route 1 | Stop 2
Route 1 | Stop 3
Route 2 | Stop 1
Route 2 | Stop 2
我希望它能返回:

Route 1 | Stop 1 | Stop 3
Route 2 | Stop 1 | Stop 2

我可以加入他们并获得最小值(Seq)和最大值(Seq),但不确定如何获得ID而不是Seq。这几乎就像我想做两个连接,但多个字段。我需要它是有效的,因为在给定的时间返回数千条路线。所以我不认为一个表值函数来获取止损点是有益的。但是,如果我可以获取最小和最大seq,并返回相关的stop ID,那么我可以简单地将stop连接到这些stop以获取相关数据。

您可以发布表架构和示例数据吗?看起来你只是想要一个简单的群组,但我不确定。哇。。。太好了。我还没有测试过效率,但它非常有效。我必须更多地检查top脚本的功能。以前用过一些,但还不足以知道什么时候该掌握这些知识@MichaelC.Gates-此类查询的通用名称为
每组最大n
每组最大n
。效率包含在
;WITH S
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY RouteId ORDER BY seq) AS RN1,
                ROW_NUMBER() OVER (PARTITION BY RouteId ORDER BY seq DESC) AS RN2
         FROM   Stops)
SELECT R.Route,
       S1.Stop,
       S2.Stop
FROM   Routes R
       JOIN S S1
         ON R.Id = S1.RouteId
       JOIN S S2
         ON R.Id = S2.RouteId
WHERE  S1.RN1 = 1
       AND S2.RN2 = 1