Sql 如何在表联接中只获得第一个结果?
我有一个问题:Sql 如何在表联接中只获得第一个结果?,sql,sql-server,Sql,Sql Server,我有一个问题: SELECT Segment_ID = Segment_ID.Segment_ID, Sprav_093.Name as Road_Wear FROM dbo.Road LEFT JOIN Segment_ID ON Road.Road_ID = Segment_ID.Road_ID LEFT JOIN Driveway_Pavement ON Segment_ID.Segment_ID = Driveway_Pavement.Segment_ID LE
SELECT
Segment_ID = Segment_ID.Segment_ID,
Sprav_093.Name as Road_Wear
FROM dbo.Road
LEFT JOIN Segment_ID ON Road.Road_ID = Segment_ID.Road_ID
LEFT JOIN Driveway_Pavement ON Segment_ID.Segment_ID = Driveway_Pavement.Segment_ID
LEFT JOIN Sprav_093 ON Driveway_Pavement.Kod_Spr093 = Sprav_093.Kod_Spr
这很好。在表
车道路面
中有几行具有相同的路段ID
。所以我只想得到第一行。如何执行此操作?尝试对两个选定字段应用MAX函数假设要为每个段id返回一行,请执行此操作
;WITh CTE AS (
SELECT
Segment_ID = Segment_ID.Segment_ID,
Sprav_093.Name as Road_Wear,
CASE WHEN Sprav_093.Name IS NOT NULL THEN
ROW_NUMBER() OVER (PARTITION BY Segment_ID.Segment_ID
ORDER BY Sprav_093.Name//or date column)
ELSE 1 END rn
FROM dbo.Road
LEFT JOIN Segment_ID ON Road.Road_ID = Segment_ID.Road_ID
LEFT JOIN Driveway_Pavement ON Segment_ID.Segment_ID = Driveway_Pavement.Segment_ID
LEFT JOIN Sprav_093 ON Driveway_Pavement.Kod_Spr093 = Sprav_093.Kod_Spr
)
SELECT * FROM CTE WHERE RN = 1
这应该起作用:
SELECT
Segment_ID = Segment_ID.Segment_ID,
Sprav_093.Name as Road_Wear
FROM dbo.Road
OUTER APPLY (
SELECT TOP 1 Segment_ID.Segment_ID
FROM Segment_ID
WHERE Segment_ID.Road_ID = Road.Road_ID
) Segment_ID
LEFT JOIN Driveway_Pavement ON Segment_ID.Segment_ID = Driveway_Pavement.Segment_ID
LEFT JOIN Sprav_093 ON Driveway_Pavement.Kod_Spr093 = Sprav_093.Kod_Spr
如果需要特定的“第一”行,您可以在
OUTER APPLY
内部的SELECT
中添加ORDER BY
是否将限制1
添加到末尾?是什么使这些行中的一行比另一行先?标准是什么?使用SQL Server的TOP 1
,SQL Server不支持LIMIT
@rs:我在TOP
@KliverMax上遇到语法错误,正确的语法是选择TOP 1列名
是的。但是我弄丢了几排。我在段ID
中有207行,但查询返回147。Max在这里可能不起作用。例如,如果行是1、20和2,10将max应用于这两行将得到2、20。这意味着您现在有两个不同行的一部分。