Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
 Аватар для Aumi
20 / 36 / 14
Регистрация: 08.10.2015
Сообщений: 406

Сортировка смешанного столбца

21.03.2018, 16:47. Показов 2226. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Есть в таблице tab1 столбец Korobka (varchar(50)).
В этом столбце хранятся данные :


1ПП
2ПП
1012А
99ПП
....

Т е. числа от 1 до 9999, а участвуют только 2 вида букв А и ПП.
Хочу отсортировать их так


1012А
1ПП
2ПП
99ПП

Сначала берется группа с буквой А и сортируется по возрастанию, а затем с ПП.

Простая сортировка сортирует не так. Буквы смешиваются, после тысяч запросто пойдут сотни...
SQL
1
SELECT * FROM tab1 ORDER BY korobka
Запрос ниже сортирует, но совсем то.
1ПП


2ПП
3ПП


4ПП
SQL
1
    SELECT * FROM tab1 WHERE korobka IS NOT NULL ORDER BY REPLACE(REPLACE(korobka,'A',''),'ПП','')+0;
Как быть?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2018, 16:47
Ответы с готовыми решениями:

Сортировка двумерного массива по убыванию отношений элементов первого столбца к элементам правого столбца
Привет. Решал задачу о непрерывном рюкзаке и столкнулся с проблемой, что не могу отсортировать двумерный массив, состоящий из двух...

Сортировка столбца
Здравствуйте, подскажите есть ли возможность отсортировать в Excel 2013 столбец так, к примеру указан адрес: Омск ул. Юбилейная д. 17 ...

Сборка для смешанного режима
Здравствуйте, Есть проект, который выполняет скрипт на sql. Но выскакивала ошибка у меня: Сборка для смешанного режима построена на...

8
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
21.03.2018, 17:45
Цитата Сообщение от Aumi Посмотреть сообщение
Как быть?
T-SQL
1
order by left(space(20) + korobka, 20)
0
 Аватар для Aumi
20 / 36 / 14
Регистрация: 08.10.2015
Сообщений: 406
26.03.2018, 10:07  [ТС]
Цитата Сообщение от invm Посмотреть сообщение
order by left(space(20) + korobka, 20)
К сожалению, данный код не вывел нужного.
Сортировка вообще не сортировала. Вернулась таблица в таком же виде как при вызове SELECT * FROM tab1
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
26.03.2018, 10:24
Цитата Сообщение от Aumi Посмотреть сообщение
К сожалению, данный код не вывел нужного.
Да я, во-первых, ошибся. Во-вторых, невнимательна прочитал, что требуется.

Как-то так:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
declare @t table (s varchar(30));
insert into @t
values
 ('1А'),
 ('2А'),
 ('1ПП'),
 ('2ПП'),
 ('1012А'),
 ('99ПП');
 
select
 *
from
 @t t cross apply
 (select nullif(patindex('%[^0-9]%', t.s), 0)) a(p) cross apply
 (select left(t.s, a.p - 1), substring(t.s, a.p, cast(0x7fffffff as int))) b(n, s)
order by
 b.n, b.s;
1
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
26.03.2018, 10:33
А
SQL
1
ORDER BY REVERSE(korobka)
не подойдет?
0
 Аватар для Aumi
20 / 36 / 14
Регистрация: 08.10.2015
Сообщений: 406
26.03.2018, 13:07  [ТС]
ltv_1953, Cортировка происходит интересным образом. По алфавиту продходит, но с числами, что делать я не придумала. Выходит так: 10А,20А,1А,2А,1ПП,11ПП,3ПП
Была идея приткнуть Left, но застряла на этом.

invm, с вашим способом тоже возникли трудности(на картинке вывод до изменений), подправив код, я получила, что хотела.
Вот, что изменила

SQL
1
2
3
4
5
6
7
8
SELECT
 *
FROM
 @t t CROSS apply
 (SELECT NULLIF(patindex('%[^0-9]%', t.s), 0)) a(p) CROSS apply
 (SELECT CAST(LEFT(t.s, a.p - 1) AS INT), SUBSTRING(t.s, a.p, CAST(0x7fffffff AS INT))) b(n, s)
ORDER BY
 b.s, b.n;
Всем спасибо
Изображения
 
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
26.03.2018, 13:11
Цитата Сообщение от Aumi Посмотреть сообщение
По алфавиту продходит, но с числами, что делать я не придумала.
Получается так
korobka
1012А
1ПП
2ПП
99ПП
Это то, что хотели получить
Цитата Сообщение от Aumi Посмотреть сообщение


1012А
1ПП
2ПП
99ПП
Что не так?
0
 Аватар для Aumi
20 / 36 / 14
Регистрация: 08.10.2015
Сообщений: 406
26.03.2018, 14:40  [ТС]
ltv_1953, согласна с вами. Если писать так,
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  declare @t table (s varchar(30));
insert into @t
values
 ('1А'),
 ('2А'),
 ('1ПП'),
 ('2ПП'),
 ('1012А'),
 ('99ПП');
 
 select
 *
from
 @t t ORDER BY REVERSE(s)
то норм.

Я вот применяя для своей реальной таблицы, то первым значением будет 1000А. Прикладываю скрин. У меня было предположение, что вместо русской "А" используется английская, т к эти данные попадают в таблицу из экселя пользователя с помощью с#. Но меняв буквы "А" в мини примере, sql все равно из какого языка буква А и сортирует норм.

Создала свою таблицу и ввела туда несколько значений. Итог все такой же
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
29.03.2018, 15:26
БД не предназначена для подобных операций. Возможно, эти значения и правда отдельная сущность, но я бы разбил их на два столбца:
T-SQL
1
2
3
numIdx int, 
charIdx varchar(2),  
zone varchar(10) as cast(numIdx as varchar) + charIdx
и тогда сортировка без проблем.

ну или если хочется извращений, то :

T-SQL
1
order by substring(zone, len(zone), 1), len(zone), zone
прим: учитывается только последняя буква. если возможны значения БА, ВА, ДА и т.п. то они отсортированы не будут

Добавлено через 19 минут
для любого количества букв в конце:
T-SQL
1
order by substring(zone, patindex('%[^0-9]%', zone), len(zone) - patindex('%[^0-9]%', zone)+1), len(zone), zone
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2018, 15:26
Помогаю со студенческими работами здесь

Упорядочивание смешанного одномерного массива
Есть ли возможность упорядочить смешанный одномерный массив, содержащий числа и буквы, например {a-12, z-2, r-12, x-4, и т.д и т.п.}...

Вычисление функции смешанного типа
Всем привет. Задали задачу (рисунок внизу). Вот что у меня получилось, правильно ли сделал? Option explicit Sub Algorithm_9(10) ...

Логарифмическое уравнение смешанного типа
Есть логарифмическое уравнение: 4 - x = \log_5 x. В моем решение нет ни одного корня, но в книге есть один корень. Как ее решить правильно?

Вычисления смешанного произведения векторов
Даны три вектора а=(a1, a2, a3), b=(b1, b2, b3) и c=(c1, c2, c3). Написать программу вычисления смешанного произведения этих векторов.

Сортировка столбца в массиве
В двумерном массиве Y отсортировать элементы предложенного N -го столбца.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru