Страница 1 из 2

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

Добавлено: 19 мар 2021, 14:52
broken
Итак!
Что имею )
Имею БД МИС, которая заполялась не один год. Люди вносились не по алфавиту. У них идентификатор (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 ('ВАСИЛЬЕВ ВАСИЛИЙ ВАСИЛЬЕВИЧ','ФЕДУЛОВ ФЕДУЛ ФЕДУЛОВИЧ','СЕМЕНОВ СЕМЕН СЕМЕНОВИЧ')

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

Добавлено: 19 мар 2021, 14:58
rogoznik
broken писал(а):
19 мар 2021, 14: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 = 'СЕМЕНОВ СЕМЕН СЕМЕНОВИЧ'
Значения вернет в нужном порядке.

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

Добавлено: 19 мар 2021, 15:09
demonlibra
Тоже самое хотел предложить, но не успел.
Добавлю, что это всё можно реализовать в том сценарии, который я писал.

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

Добавлено: 19 мар 2021, 15:13
demonlibra
Еще можно (наверное) выполнить сортировку данных в исходной таблице, а после использовать order by в SQL запросе.

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

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

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

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

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

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

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

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

Добавлено: 22 мар 2021, 10:00
broken
Пока пришел к
Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.

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

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

Добавлено: 22 мар 2021, 10:48
rogoznik
Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.

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

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

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

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


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

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

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

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

DECLARE @row_number INT;

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

Добавлено: 22 мар 2021, 12:12
broken
Странно, что здесь об этом не упомянули

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

Добавлено: 22 мар 2021, 12:15
rogoznik
broken, так надо документацию читать, а потом уже искать статьи с примерами использования. Тогда будет меньше ошибок

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

Добавлено: 22 мар 2021, 14:38
broken

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

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

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

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

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

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

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

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

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

Добавлено: 22 мар 2021, 15:12
broken
т.е. row_number нужно еще и в values прописывать?

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

Добавлено: 22 мар 2021, 15:14
rogoznik
broken, в текущем виде запроса бесполезно ибо все равно будет для каждой строки одно значение, ну и вызовет ошибку, т.к. в таблице только одно поле.

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

Добавлено: 22 мар 2021, 16:36
rogoznik
Скрытый текст
Для просмотра скрытого текста необходимо быть авторизованным пользователем.

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