2017-01-24 33 views
0
SELECT distinct TOP 100 
event.[ExtId], 
event.[EventId], 
event.[StateId] 
FROM 
(
SELECT CS.[Id], 
CS.[ExternalId], 
CS.[EventId], 
CS.[StateId] 
FROM CS 
ORDER BY CS.[Id] asc 
) event 

是給了一個錯誤,在SQL說ORDER BY子句條款是無效的意見,等等...什麼是做到這一點的最好的正確方法?SQL與秩序和Top鮮明

+1

你爲什麼要訂購你的子查詢?我想你想要訂購外部查詢。簡單地把ORDER BY放在最後。 –

+0

@NunoMendes。 。 。你能提供樣本數據和預期結果嗎? –

回答

3

您需要使用GROUP BY,因爲ORDER BY的:

SELECT TOP 100 e.[ExtId], e.[EventId], e.[StateId] 
FROM (SELECT DISTINCT CS.[Id], CS.[ExternalId], CS.[EventId], CS.[StateId] 
     FROM CS 
    ) e 
GROUP BY e.[ExtId], e.[EventId], e.[StateId] 
ORDER BY MIN(CS.[Id]); 

我認爲這是完全等價於:

SELECT TOP 100 CS.[ExternalId], CS.[EventId], CS.[StateId] 
FROM CS 
GROUP BY CS.[ExternalId], CS.[EventId], CS.[StateId] 
ORDER BY MIN(CS.[Id]); 

這是寫的邏輯比較典型的方式。

+0

嗨,戈登,我想要明顯的子查詢以外 – Mendes

+0

它完美地感謝戈登 – Mendes