powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / установить принудительно порядок сортировки по определенным значениям
21 сообщений из 21, страница 1 из 1
установить принудительно порядок сортировки по определенным значениям
    #39995590
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS SQL не моё на я в нем, и решение я нашел, но прежде всё сделал в Oracle, и в Oracle всё работает прекрасно и быстро, а вот в MS SQL всё под большим вопросом.
не буду показывать моё решение, хочу узнать разные мнения, если у кого есть желание поучавствовать, читаем дальше

есть таблица в ней есть поле, в котором задается принудительный порядок сортировки, каждая запись имеет значение для сортировки от 1 до N, в случае удаления записи получается дырка, это нормально, так как настройка сортировки выполняется в софте, дырка будет закрыта.
но до создания алгоритма настройки сортировки данные были уже внесены и лежат в таблице,
и так, нужно сделать порядок сортировки на MS SQL по одному полю, только по тем записям, где нет значений или где значяение равно -1 или равно 0,
при том исключить дублирование чисел в столбце.

Задача в MS SQL без использования индекса.
и так есть список
-1
-1
1
2
-1
5
7


нужен результат
3 - изменено
4 - изменено
1
2
6 - изменено
5
7
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995595
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал, но
не буду показывать моё решение
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995596
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63,

непонятно, вам надо заполнить "дыры"? Или вы решили, что в базе данные будут обработаны в том порядке, в котором Вы их видите на экране?
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995600
baracs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63,

Постановка задач, тоже - не ваше.
Вам надо апдейтить колонку, в которой значения, по которым идет сортировка?
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995608
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baracs,

постановка не моя. я так ни когда не делаю в моих проектах.
и да, нужно апгрейтить столбец именно как в примере я приложил.

это нужно проделать один раз, на старые данные, но конечно можно положить на софт, считать всё например в вариантовский массив, сделать сортировку, подменить значения и обратно вставить в базу, но когда речь идет о 100 записей, да, а если там миллион.
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995626
baracs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
постановка не моя
Т.е. вы сюда транслируете чьи-то вопросы?
yemets63
настройка сортировки выполняется в софте
И как сервер узнает про ее правила?
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995656
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63,
что-то из серии
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table #t (
    col1 int
  , col2 nchar
);
insert into #t(col1, col2)
values (-1, N'c'), (-1, N'd'), (1, N'a'), (2, N'b'), (0, N'f'), (5, N'e'), (7, N'g')
;
with cte
as (select  rn = row_number() over (order by t.col2)
          , t.col1
        from #t t
   )
update cte
    set col1 = rn
    from cte
    where cte.col1 in (-1, 0)
;
select *
    from #t
;
drop table #t;


Но что-то мне подсказывает, что сейчас пойдут разные уточнения...
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995683
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
-1
-1
1
2
-1
5
7


нужен результат
3 - изменено
4 - изменено
1
2
6 - изменено
5
7
а почему именно первый -1 стал тройкой? это критично?
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995686
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
есть таблица в ней есть поле, в котором задается принудительный порядок сортировки, каждая запись имеет значение для сортировки от 1 до N, в случае удаления записи получается дырка, это нормально, так как настройка сортировки выполняется в софте, дырка будет закрыта.
интересно, как это будет работать в многопользовательском режиме
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995699
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

with (tablock) наше всё!
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995701
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63,

вы мыслите не множествами, а массивами.

множества чисел
{-1,-1,1,2,-1,5,7}
{7,2,1,-1,-1,5,-1}
{-1,-1,1,2,5,-1,7}
между собой равны. Сервер может обрабаывать строки в любом порядке, если явно не указать порядок сортировки.
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995720
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

нет не критично, просто я принял сортировку от начала

смотрю на первый индекс, он равен -1

смотрю далее по списку
1 занят
2 занят

3 свободен

ставлю его вместо -1 и так далее.
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995723
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baracs,

действительно тема моя, но не транслирую чьито вопросы,
просто получилось так, что есть человек, и не хочетсья его обидеть, и спорить не очень приятно, но нужны мнения, которые придеться ему показать, у нас есть уверенность что он не пользователь SQL.ru , кто знает,
поэтому задача была упрощена от его идеи и текст здесь.

у меня есть, так называемые тупые и быстрые сортировки служебных настроечных данных в админках моих проектов, мне нравится, и не только мне, быстро, наглядно и доходчиво.
конкретно в данном случае ситуация иная, и я собираю мнения построенные на решениях.
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995763
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
баловство одно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
declare @max int;
declare @ins table  (ID int,  value int);

insert into @ins
values(1,5),      (2,-1),      (3,-1),      (4,4),      (5,15),
      (6,6),      (7,-1),      (17,-1),      (18,9),      (19,-1),
      (29,29),    (49,-1),     (59,-1),      (8,100)

select *   from @ins;

select @max=max(value) from @ins;


with cte as
(
select 1 value
union all
select value+1 from cte
where value < @max
)
update @ins
   set value=t1.value
  from @ins i
  -- дырки, которые заполняем
  join (select id, value, row_number() over(order by id) rn from @ins where value < 0) t on t.id = i.id
  -- дырки, которыми заполняем
  join (
    select value, row_number() over(order by value) rn
      from
        (
        select value from cte
        except
        select value from @ins
        )t
) t1 on t1.rn=t.rn;

select *
  from @ins
;

до
IDvalue152-13-144515667-117-118919-1292949-159-18100после
IDvalue1521324451566731771891982929491059118100
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995951
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baracs
Постановка задач, тоже - не ваше.
Точно.


yemets63
это нужно проделать один раз, на старые данные, но конечно можно положить на софт, считать всё например в вариантовский массив, сделать сортировку, подменить значения и обратно вставить в базу, но когда речь идет о 100 записей, да, а если там миллион.
В этом описании одно непонятно - зачем делать сортировку?

Если я сделаю сортировку много раз разными способами, а потом вставляю данные в таблицу, то от этого ничего не изменится. В сиквеле это так.

Мне кажется, у вас есть какие то умолчания, из мира Оракла, и вы их переносите в свой вопрос. Но мы про них не знаем.

В сиквеле сортировка результата определяется кляузой ORDER BY в запросе, и не зависит от каких то сортировок, которые вы делаете перед тем, как положить данные в таблицу.
А если вы не используете ORDER BY в запросе, то сортировка результата может быть разный, она недетерминирована, и, опять же, это не зависит от того, сколько раз вы сортировали данные перед вставкой в таблицу.

Или, возможно, вы имеете в виду что то совсем другое, но ваша постановка задачи просто ошеломляет.
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39995952
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

там в рассуждениях все неверно начиная от постановки задачи.
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39996090
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
если вы не используете ORDER BY в запросе, то сортировка результата может быть разный, она недетерминирована


Это и в оракле так же.
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39996351
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
alexeyvg
если вы не используете ORDER BY в запросе, то сортировка результата может быть разный, она недетерминирована


Это и в оракле так же.
Например, в оракле всё таки rownum есть, может, ТС подразумевает под "сортировкой" последовательность rownum в результате запроса?
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39996466
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
в оракле всё таки rownum есть


rownum в оракле не аналог TOP N .. ORDER BY, этот псевдостолбец заполняется по мере извлечения данных в курсор, после WHERE, но до ORDER BY.

Поэтому rownum не даёт никакой дополнительной сортировки и если нужны первые N строк, то надо сначала сделать сортировку в подзапросе, а уже потом накладывать ограничение rownum <= N на выборку из оного.

ТС говорит про varray - это элемент процедурного языка pl/sql в оракле, наиболее близкая аналогия будет с реализацией сортировки массива данных в CLR через коллекции в .Net
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39996588
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю, если ТСу интересно еще, он переспросит )
...
Рейтинг: 0 / 0
установить принудительно порядок сортировки по определенным значениям
    #39996660
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
alexeyvgв оракле всё таки rownum есть


rownum в оракле не аналог TOP N .. ORDER BY, этот псевдостолбец заполняется по мере извлечения данных в курсор, после WHERE, но до ORDER BY.

Поэтому rownum не даёт никакой дополнительной сортировки и если нужны первые N строк, то надо сначала сделать сортировку в подзапросе, а уже потом накладывать ограничение rownum <= N на выборку из оного.Я понимаю, что не аналог, вот я и думаю, что же ТС имел в виду, говоря про сортировку без order by?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / установить принудительно порядок сортировки по определенным значениям
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]