powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста сделать запрос.
5 сообщений из 5, страница 1 из 1
Помогите, пожалуйста сделать запрос.
    #40138653
vard32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Код: SQL
1.
select @@VERSION
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)

Есть таблица:
login requested status
ivanov 2020-06-02 (02:00) approved
ivanov 2021-11-14 (02:00) 2021-11-16 (02:00) approved
ivanov 2020-01-25 (02:00) in progress
petrov 2023-05-02 (01:30) 2023-05-03 (01:00) 2023-05-10 (01:30) 2023-05-11 (01:30) 2023-05-19 (01:30) 2023-07-03 (01:00) approved
sidorov 2023-10-27 (02:00) 2023-11-01 (01:00) in progress
sidorov 2023-08-29 (04:00) approved
Нужно получить такой результат:
login requested status
ivanov 2020-06-02 (02:00) approved
ivanov 2021-11-14 (02:00) approved
ivanov 2021-11-16 (02:00) approved
ivanov 2020-01-25 (02:00) in progress
petrov 2023-05-02 (01:30) approved
petrov 2023-05-03 (01:00) approved
petrov 2023-05-10 (01:30) approved
petrov 2023-05-11 (01:30) approved
petrov 2023-05-19 (01:30) approved
petrov 2023-07-03 (01:00) approved
sidorov 2023-10-27 (02:00) in progress
sidorov 2023-11-01 (01:00) in progress
sidorov 2023-08-29 (04:00) approved
т.е. превратить поле "reuested" состоящее из дат разделенных "пробелом" в записи этого же набора добавив login и status.
Понимаю, что модель исходной таблицы кривая, но что есть то есть.
...
Рейтинг: 0 / 0
Помогите, пожалуйста сделать запрос.
    #40138654
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одним запросом не получится. Я бы прошелся курсором и перенес данные в нормализованную таблицу
...
Рейтинг: 0 / 0
Помогите, пожалуйста сделать запрос.
    #40138655
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Server нет под рукой, но что-нибудь такое:
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select login, cast(value as varchar(18)) requested, status
  from (values
         ('ivanov', '2020-06-02 (02:00)', 'approved'),
         ('ivanov', '2021-11-14 (02:00) 2021-11-16 (02:00)', 'approved'),
         ('ivanov', '2020-01-25 (02:00)', 'in progress'),
         ('petrov', '2023-05-02 (01:30) 2023-05-03 (01:00) 2023-05-10 (01:30) 2023-05-11 (01:30) 2023-05-19 (01:30) 2023-07-03 (01:00)', 'approved'),
         ('sidorov', '2023-10-27 (02:00) 2023-11-01 (01:00)', 'in progress'),
         ('sidorov', '2023-08-29 (04:00)', 'approved')
       ) as t(login, requested, status)
       cross apply string_split(replace(requested, ') ', '),'), ',');
https://onecompiler.com/sqlserver/42fz76jhc
...
Рейтинг: 1 / 0
Нравится: vard32
Помогите, пожалуйста сделать запрос.
    #40138656
vard32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeaGate [игнорируется] 

Благодарю за ответ. Очень познавательно для меня!
Но проблема в том, что эта магия работает только с конструкцией:
Код: SQL
1.
2.
3.
4.
5.
6.
values ('ivanov', '2019-03-27 (02:00) 2019-03-26 (00:30)', 'approved'),
         ('ivanov', '2021-11-14 (02:00) 2021-11-16 (02:00)', 'approved'),
         ('ivanov', '2020-01-25 (02:00)', 'in progress'),
         ('petrov', '2023-05-02 (01:30) 2023-05-03 (01:00) 2023-05-10 (01:30) 2023-05-11 (01:30) 2023-05-19 (01:30) 2023-07-03 (01:00)', 'approved'),
         ('sidorov', '2023-10-27 (02:00) 2023-11-01 (01:00)', 'in progress'),
         ('sidorov', '2023-08-29 (04:00)', 'approved')
и ни в какую не работает с реальной таблицей (назовем её req) структуру которой я описал в своём запросе.
точнее Select отрабатывает, но при этом съедает вторую, третью, четвертую... и т.д. даты в поле "requested" если дата не одна.
...
Рейтинг: 0 / 0
Помогите, пожалуйста сделать запрос.
    #40138657
vard32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, разобрался. У меня в поле requested, заместо ожидаемых ")<пробел>" было "(<символ с кодом 10>"
поэтому и не работало.

Ещё раз благодарю за ответ!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста сделать запрос.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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