Sql server 一对多返回单行
MS SQL: 表一:路由——表二:站点(使用int字段[seq]获取站点序列,键字段ID) 如何将[routes]加入[stops]表,并仅将第一条和最后一条路线返回到一行中 假设我做了一个简单的连接: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
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