2017-01-24 5 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と上のDistinct

+1

なぜサブクエリを注文したいですか?私は外側のクエリを注文したいと思います。 ORDER BYを最後に置くだけです。 –

+0

@NunoMendes。 。 。サンプルデータと期待される結果を提供できますか? –

答えて

3

あなたは理由ORDER BYの、GROUP BYを使用する必要があります。これは、ロジックを記述するために、より一般的な方法です

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

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]); 

私はこれはと完全に同等であると思います。

+0

こんにちはゴードン、私はサブクエリの別の外側にしたい – Mendes

+0

それは完璧に感謝ゴードン作品 – Mendes