[英]How to get only first result in tables join?
I have a query: 我有一个查询:
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
Is works fine. 是正常的。 There are several row with same
Segment_ID
in table Driveway_Pavement
. 有几个行与同
Segment_ID
表Driveway_Pavement
。 So i want get just first of this rows. 因此,我只想获得此行的第一行。 How can i do it?
我该怎么做?
Assuming that you want to return one row for each segment id, do this 假设您要为每个细分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
尝试将MAX函数应用于两个选定字段
This should work: 这应该工作:
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
You can add an ORDER BY
to the SELECT
inside of the OUTER APPLY
if you want a specific "first" row. 如果需要特定的“第一”行,则可以在
OUTER APPLY
内部的SELECT
添加一个ORDER BY
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.