2013-02-14 20 views
-1

我有一個查詢:如何在表中加入第一個結果?

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 

是正常工作。表Driveway_Pavement中有幾行Segment_ID。所以我想要得到這一行的第一個。我該怎麼做?

+2

添加'LIMIT 1'到最後? [SQL限制/頂部](http://stackoverflow.com/questions/971964/limit-10-20-in-sqlserver) – UnholyRanger 2013-02-14 18:25:12

+0

是什麼使這些行中的一個比另一個先行,是什麼標準? – Lamak 2013-02-14 18:25:31

+3

SQL-Server使用'TOP 1',SQL Server不支持'LIMIT' – 2013-02-14 18:25:44

回答

5

假設你想返回一行每個段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 
+0

是的它的工作,但我失去了一些行在'Segment_ID'中有207行,但是查詢返回147. – 2013-02-14 18:34:41

+0

@KliverMax,檢查更新的解決方案 – 2013-02-14 18:41:06

0

嘗試應用MAX函數都選定字段

+1

Max可能在這裏不工作,如果例如行是1,20和2,10對兩行應用最大值給你2,20。這意味着你現在有兩個不同的行的一部分 – 2013-02-14 19:47:31

0

這應該工作:

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 

如果您需要特定的「第一個」行,您可以將ORDER BY添加到OUTER APPLY內部的SELECT

相關問題