Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / установить принудительно порядок сортировки по определенным значениям / 21 сообщений из 21, страница 1 из 1
04.09.2020, 12:46
    #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
04.09.2020, 12:53
    #39995595
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
установить принудительно порядок сортировки по определенным значениям
Сделал, но
не буду показывать моё решение
...
Рейтинг: 0 / 0
04.09.2020, 12:54
    #39995596
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
установить принудительно порядок сортировки по определенным значениям
yemets63,

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

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

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

это нужно проделать один раз, на старые данные, но конечно можно положить на софт, считать всё например в вариантовский массив, сделать сортировку, подменить значения и обратно вставить в базу, но когда речь идет о 100 записей, да, а если там миллион.
...
Рейтинг: 0 / 0
04.09.2020, 13:40
    #39995626
baracs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
установить принудительно порядок сортировки по определенным значениям
yemets63
постановка не моя
Т.е. вы сюда транслируете чьи-то вопросы?
yemets63
настройка сортировки выполняется в софте
И как сервер узнает про ее правила?
...
Рейтинг: 0 / 0
04.09.2020, 14:13
    #39995656
Guf
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
04.09.2020, 15:02
    #39995683
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
установить принудительно порядок сортировки по определенным значениям
yemets63
-1
-1
1
2
-1
5
7


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

with (tablock) наше всё!
...
Рейтинг: 0 / 0
04.09.2020, 15:52
    #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
04.09.2020, 16:38
    #39995720
yemets63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
установить принудительно порядок сортировки по определенным значениям
andreymx,

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

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

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

3 свободен

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

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

у меня есть, так называемые тупые и быстрые сортировки служебных настроечных данных в админках моих проектов, мне нравится, и не только мне, быстро, наглядно и доходчиво.
конкретно в данном случае ситуация иная, и я собираю мнения построенные на решениях.
...
Рейтинг: 0 / 0
04.09.2020, 18:51
    #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
05.09.2020, 20:59
    #39995951
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
установить принудительно порядок сортировки по определенным значениям
baracs
Постановка задач, тоже - не ваше.
Точно.


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

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

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

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

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

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


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


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


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

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

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


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

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


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