Повторяющиеся значения не должны отображаться вместе в SQL

#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
 

db<>скрипка

Ответ №2:

Вы можете поместить row_number() непосредственно в order by . Я бы рекомендовал:

 select t.*
from t
order by row_number() over (partition by name order by id),
         name;