2017-01-24 17 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 Clause недействительно в представлениях и т. Д. Каков наилучший правильный способ сделать это?SQL с заказом и Top Distinct

+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