2017-02-09 3 views
0

У меня есть таблица в моей БД, которая находится в MSSQL, имеющий следующую структуруВыберите определенный набор значений значений из таблицы в MS Sql

DayID  Sequence   Cities  Title  Hotels 
---------------------------------------------------------------- 
1     1    Manali  Day1  Hotel A  
2     2    Manali  Day2  Hotel B  
3     2    Delhi  Day3  Hotel C  
4     3    Delhi  Day4  Hotel D  
5     3    Manali  Day5  Hotel E  
6     4    Manali  Day6  Hotel F 

Теперь мне нужен результат следующим образом

Cities 
------ 
Manali  
Delhi 
Manali. 

У меня есть используемая группа по городам, но она дает только два города

Manali 
Delhi 

Но мне нужен следующий выход.

Manali  
Delhi 
Manali 

Пожалуйста, предложите.

Спасибо заранее.

+2

Почему это помечено MySQL, когда вы говорите о MSSQL? –

ответ

0

в зависимости от требований можно сгруппировать по например: выберите Города из таблицы группы по городам

+4

Это вернет Manali, Delhi.not Manali, Delhi, Manali –

4

Попробуйте это:

SELECT Cities 
FROM (
    SELECT Cities, DayID, 
      ROW_NUMBER() OVER (ORDER BY DayID) - 
      ROW_NUMBER() OVER (PARTITION BY Cities ORDER BY DayID) AS grp 
    FROM mytable) AS t 
GROUP BY Cities, grp 
ORDER BY MIN(DayID) 

Расчетное поле grp идентифицирует острова последовательных записей, имеющих одинаковую Cities значение. Используя это поле в предложении GROUP BY, мы можем извлечь требуемую последовательность значений Cities.

Примечание: Вышеупомянутый запрос работает в SQL Server.

+0

Я думаю, что вы пропустили запятую после DayID здесь: 'SELECT Cities, DayID' – RIKI

+1

@OTARIKI Да, спасибо, хороший улов. –

+0

@GiorgosBetsos, Большое спасибо. – salloy

0

Сначала убедитесь, что таблица сортируется таким образом, мы можем использовать «на» опции в шаге данных:

proc sort data=tablename; 
by sequence cities; 
run; 

В шаге данных используют «от» пункта, чтобы выбрать первую строку каждой группы и выход. Только «держать» города по просьбе пользователя

data desired; 
keep cities; 
set tablename; 
by sequence cities; 
if first.cities then output; 
run; 
+0

Можете ли вы добавить контекст вокруг своего ответа, объясняя, что это делает? – Shawn

+0

там вы идете :) – DCR

+0

Большое спасибо! – Shawn