Сортировка вывода по привязке к скармливаемому списку

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 19 мар 2021, 11:52

Итак!
Что имею )
Имею БД МИС, которая заполялась не один год. Люди вносились не по алфавиту. У них идентификатор (PATIENTS_ID) в системе.
Имею файл ексель. В котором несколько вкладок. Сначала составляется планируемый список людей, потом фактический, реестр, результат ...
21-03-19-135132.png
(Результат алф был создан уже для алфавитирования для вставки номеров.)
Реестр распечатывается и отправляется в лабораторию. Результат сохраняется и пересылается дальше по почте для обработки другими. Обзвон, статистика и хз для чего еще.
Есть так же вкладка, в которой я сортирую по алфавиту чтоб подать в процедурку в распечатанном виде.
Процедурка отмечает галочками кто по факту пришел. Но это скорее для себя.
Параллельно с процедурами идет забивка в портал лаборатории.
Разумеется по факту. Как пришли люди так их и забивают в портал. Т.е. вообще никак не связано с БД МИС.
Далее... на следующий день беру оттуда референсные значения. И выложены они там именно в том фактическом варианте. Как и были внесены. Т.е. я из фактической вкладки копирую данные во вкладку "Результаты" и дополняю значениями.
Полученный результат сохраняется как отдельный файл (копируется файл, остальные вкладки удаляются). отсылается почтой.
Дальше у результата теста есть определенный параметр.
Они выделены жирным.
21-03-19-133925.png
Вот их соответственно у столбца фильтрую (больше или равно 1). Он мне их дает. Я копирую и скармливаю SQL.
Но SQL мне выдает отсортированным по PATIENTS_ID
Но это совершенно другой порядок, нежели тот, что я ему скормил )
По запрошенным данным заполняются телефоны. Файл копируется. Остальные вкладки удаляются. Удаляются лишние строки. Отправляется почтой по другому адресу.
Вся тирада для того, чтобы объяснить зачем нужен файл xls.

В БД к примеру хранятся так
21-03-19-144003.png
Пришли они так (и соответственно их так записали в портал и в итоговом результате такой же вариант).
21-03-19-144406.png
У жирных нужны данные
21-03-19-144459.png
Фильтрую
21-03-19-144627.png
Копирую отфильтрованное. Прогоняю через скрипт от demonlibra
Вставляю в запрос.
Вывод будет в варианте как записи хранятся в БД. Т.е. по PATIENTS_ID
21-03-19-144930.png
Возможно ли вывести именно в том порядке, в котором я скармливаю ФИО?

Код: Выделить всё

SELECT PATIENTS_ID
,MOBIL_TELEFON
,FULL_NAME
FROM BD.dbo.PATIENTS
WHERE FULL_NAME IN ('ВАСИЛЬЕВ ВАСИЛИЙ ВАСИЛЬЕВИЧ','ФЕДУЛОВ ФЕДУЛ ФЕДУЛОВИЧ','СЕМЕНОВ СЕМЕН СЕМЕНОВИЧ')

Решение rogoznik » 22 мар 2021, 15:19
broken, должен будешь :-D

Код: Выделить всё

DECLARE @FIO_tmp table(
my_id int IDENTITY(1,1),
fiot_tmp varchar(100) NOT NULL
)
INSERT запрос собрать скриптом

Код: Выделить всё

sql="INSERT INTO @FIO_tmp (fiot_tmp) VALUES"

OLDIFS=$IFS
IFS=','

arrFio=$1

for fio in $arrFio
do
    sql="$sql ('$fio'),"
done

IFS=$OLDIFS

sql=$(echo ${sql%?})

echo $sql
Запускать так

Код: Выделить всё

bash script_name "Ф И О,Ф И О,Ф И О"
Ну и дальше

Код: Выделить всё

SELECT fiot_tmp, my_id FROM @FIO_tmp ORDER BY my_id

Перейти к ответу ➙
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 19 мар 2021, 11:58

broken писал(а):
19 мар 2021, 11:52
Возможно ли вывести именно в том порядке, в котором я скармливаю ФИО?
Как вариант на скорую руку - можно скриптом собрать такой запрос

Код: Выделить всё

SELECT PATIENTS_ID
,MOBIL_TELEFON
,FULL_NAME
FROM BD.dbo.PATIENTS
WHERE FULL_NAME = 'ВАСИЛЬЕВ ВАСИЛИЙ ВАСИЛЬЕВИЧ'
UNION
SELECT PATIENTS_ID
,MOBIL_TELEFON
,FULL_NAME
FROM BD.dbo.PATIENTS
WHERE FULL_NAME = 'ФЕДУЛОВ ФЕДУЛ ФЕДУЛОВИЧ'
UNION
SELECT PATIENTS_ID
,MOBIL_TELEFON
,FULL_NAME
FROM BD.dbo.PATIENTS
WHERE FULL_NAME = 'СЕМЕНОВ СЕМЕН СЕМЕНОВИЧ'
Значения вернет в нужном порядке.
ИзображениеИзображение

Аватара пользователя

demonlibra
Сообщения: 663
Зарегистрирован: 12 авг 2017, 06:09
Решено: 7
Откуда: Ростов-на-Дону
Благодарил (а): 15 раз
Поблагодарили: 130 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение demonlibra » 19 мар 2021, 12:09

Тоже самое хотел предложить, но не успел.
Добавлю, что это всё можно реализовать в том сценарии, который я писал.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-20.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

demonlibra
Сообщения: 663
Зарегистрирован: 12 авг 2017, 06:09
Решено: 7
Откуда: Ростов-на-Дону
Благодарил (а): 15 раз
Поблагодарили: 130 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение demonlibra » 19 мар 2021, 12:13

Еще можно (наверное) выполнить сортировку данных в исходной таблице, а после использовать order by в SQL запросе.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-20.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 19 мар 2021, 12:15

Ну сейчас то так и происходит. Добавлен "результат алф". В нем люди выстраиваются по алфавиту и в запросе order by FULL_NAME

Аватара пользователя

Chocobo
Сообщения: 9708
Зарегистрирован: 27 авг 2016, 19:57
Решено: 210
Откуда: НН
Благодарил (а): 746 раз
Поблагодарили: 2861 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение Chocobo » 19 мар 2021, 12:17

broken писал(а):
19 мар 2021, 11:52
WHERE FULL_NAME IN
стоит отметить как будет работать выборка при IN в частном случае - селект сканирует таблицу по порядку и проверяет вхождение FULL_NAME в условия WHERE
И если нашел то выводит в том порядке в котором она ему попалась. Отсюда и результат)

юнион должен сработать вполне , но навреное может быть тяжеловато на много записей.
Можно еще по входному списку создать temporary табличку с вставкой по нужному порядку со своим инкрементом идентификатора, и будет по чему травить order by при селекте или джоине.
Изображение
   
Изображение

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 19 мар 2021, 15:42

Ну что как успехи? Что-то придумалось?
broken, а почему условие по ФИО, а не по PATIENTS_ID? Ведь может оказаться полный тезка
ИзображениеИзображение

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 22 мар 2021, 07:00

Пока пришел к
Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.

В основной таблице данные хранятся в другом порядке. Думаю ID во временной смысла нет, поскольку наполнение и будет как ID... т.е. храниться то в том виде, в котором я объявил...
правда и объявление отличается от того... но это переделать не проблема. Здесь же опять же ругается на какую-то склярную. Впервые вижу )
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 22 мар 2021, 07:48

Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.
ИзображениеИзображение

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 22 мар 2021, 08:13

Спасибо за уточнение!
Не вышел каменный цветок ) Всё равно выводит по тому порядку, в котором хранится в основной таблице )
Но вариант уже хотя бы работает ))) не имел дела с временными таблицами :hoho:

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 22 мар 2021, 08:44

Опять имею ошибку скалярную переменную... :hm:
Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.


PS пытаюсь хотя бы из одной времянки вытянуть нужный порядок...
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 22 мар 2021, 09:07

broken писал(а):
22 мар 2021, 08:44
SET @row_number = 0 ;
Переменная не объявлена
Нужно сперва сделать

Код: Выделить всё

DECLARE @row_number INT;
ИзображениеИзображение

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 22 мар 2021, 09:12

Странно, что здесь об этом не упомянули

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 22 мар 2021, 09:15

broken, так надо документацию читать, а потом уже искать статьи с примерами использования. Тогда будет меньше ошибок
ИзображениеИзображение

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 22 мар 2021, 11:38

Код: Выделить всё

       (@MyCounter,
        CHAR( ( @MyCounter + ASCII('a') ) )
       );
непонятно. Судя по всему оно как раз и прибавляет. Ибо

Код: Выделить всё

SET @row_number = @row_number + 1;
Все 4 строки получаются с num=1.
Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 22 мар 2021, 12:02

Вобщем, с одной стороны вроде как для того чтобы номер увеличивался - нужен проход...
Но с другой стороны это же номера строк... А номер строки уже есть.... Почему тогда он везде один и тот же? :blink2:

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 22 мар 2021, 12:06

broken,
1. SELECT @row_number этот кусок возвращает значение переменной @row_number, а оно после SET @row_number = @row_number + 1; равно 1
2. В таблице @FIO_tmp у тебя есть только поле fiot_tmp
ИзображениеИзображение

Аватара пользователя

Автор темы
broken
Сообщения: 307
Зарегистрирован: 31 авг 2016, 22:45
Решено: 2
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Сортировка вывода по привязке к скармливаемому списку

Сообщение broken » 22 мар 2021, 12:12

т.е. row_number нужно еще и в values прописывать?

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 22 мар 2021, 12:14

broken, в текущем виде запроса бесполезно ибо все равно будет для каждой строки одно значение, ну и вызовет ошибку, т.к. в таблице только одно поле.
ИзображениеИзображение

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

Сортировка вывода по привязке к скармливаемому списку

Сообщение rogoznik » 22 мар 2021, 13:36

Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.

Мне вот интересно ты эти ФИО подставляешь руками или скриптом?
ИзображениеИзображение

Вернуться в «Программирование, скриптинг, виртуализация»