Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在表联接中只获得第一个结果?_Sql_Sql Server - Fatal编程技术网

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。这意味着您现在有两个不同行的一部分。