#sql #sql-server #tsql
Вопрос:
Я хочу отобразить некоторые данные, и мое требование состоит в том, что повторяющиеся значения не должны отображаться рядом. Прямо сейчас данные в таблице расположены в следующем порядке
ID Name
1 A
2 A
3 B
4 C
5 B
6 B
7 C
8 C
9 C
Ожидаемый результат — Он должен быть в следующем порядке
ID Name
1 A
3 B
4 C
2 A
5 B
7 C
6 B
8 C
9 C
Комментарии:
1. посмотрите на последние два значения в ожидаемом результате… это соседние буквы C. Есть ли лучший способ сформулировать логику «повторяющиеся значения не должны отображаться рядом».
2. Последние два значения являются оставшимися, которые должны отображаться в результате, если нет других вариантов.
3. В соответствии с руководством по вопросам, пожалуйста, покажите, что вы пробовали, и расскажите нам, что вы нашли (на этом сайте или в другом месте) и почему это не соответствует вашим потребностям.
Ответ №1:
Это можно сделать с помощью функции ROW_NUMBER
окна.
SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID) AS rn
FROM mytable
ORDER BY rn, Name
Ответ №2:
Вы можете поместить row_number()
непосредственно в order by
. Я бы рекомендовал:
select t.*
from t
order by row_number() over (partition by name order by id),
name;