Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите решить задачку  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
Есть следующая табличка

Картинка с другого сайта.

Необходимо построить табличку со следующими условиями: выбрать Status_job и ID_job произошедшие ночью, между 0 и 8 утра.
Картинка с другого сайта.


Соответственно, чтобы была привязка каждой АС к дате и вывод информации.


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

Картинка с другого сайта.

Уважаемые знатоки, куда копать? SQL-ем пользовался последний раз лет 8 назад...

К сообщению приложен файл. Размер - 3Kb
13 июл 17, 18:20    [20642092]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7746
pr0b3l1987,
Судя по последней картинке Вам потребуется PIVOT предложение запроса.
Поищите примеры, здесь неоднократно давали и в справке хорошие примеры есть.
13 июл 17, 18:27    [20642119]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
Владислав Колосов,

Странно, что картинки не приаттачились..

К сообщению приложен файл. Размер - 123Kb
13 июл 17, 20:47    [20642390]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
Владислав Колосов, спасибо, обязательно попробую использовать Pivot.
13 июл 17, 20:48    [20642394]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Remind
Member

Откуда: UK
Сообщений: 523
pr0b3l1987,

А причем тут SQL Server?
13 июл 17, 20:50    [20642397]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
Remind, таблицы нарисованы в Excel, для наглядности и чтобы не палить рабочую инфу, если ты про это.. Или ?
13 июл 17, 21:26    [20642447]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Remind
Member

Откуда: UK
Сообщений: 523
pr0b3l1987,

Решайте задачи отображения вашего отчета на клиенте. Разворачивать даты в столбцы это не задача SQL Server'a.
13 июл 17, 22:40    [20642593]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
Remind,

Этот вопрос решаю в SSMS, далее уже готовый запрос отправляю в SAP, он на основе этих данных рисует отчет.
Средствами SAP пока задачу не удается решить, поэтому, решил копать в сторону SSMS.

Сейчас столкнулся вот с чем:

Уже склеивает данные, но, не до конца, но происходит разбиение в зависимости от статуса. (см. приложенный рисунок).

К сообщению приложен файл. Размер - 22Kb
14 июл 17, 11:32    [20643658]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
+ Еще два вопроса.

1) сейчас даты вбиты руками, а хотелось бы, чтобы они динамически изменялись. Первый день, прошлый понедельник. Последний день - пятница этой недели. Использую следующую формулу:

прошлый понедельник
(convert(date,(GETDATE()-7) - (DATEPART(WEEKDAY, CONVERT(DATE,GETDATE()-2, 104))),104))
...
эта Пятница
(convert(date,(GETDATE()+4) - (DATEPART(WEEKDAY, CONVERT(DATE,GETDATE()-2, 104))),104))
.

Как мне внести эти данные в Pivot?

2) Хочется вместе с ID_job, представленном на приложенном рисунке выше, выводился еще и Status задачи. Как вывести сразу два значения? Возможно ли?
Сам запрос выглядит так:


Select distinct AC as 'Автоматизированные системы',  
[2017-07-03], [2017-07-04] , [2017-07-05], [2017-07-06], [2017-07-07], [2017-07-10], [2017-07-11] , [2017-07-12], [2017-07-13], [2017-07-14]

FROM (SELECT AC, convert(date, Create_date, 104)as con_Create_Date, Status_job, ID_job FROM  [db] Where datepart(hour,[Create_Date]) between '0' and '7') SourceTable
PIVOT
(   MAX(ID_job)

FOR con_Create_Date 
IN ( [2017-07-03] , [2017-07-04] , [2017-07-05], [2017-07-06], [2017-07-07], [2017-07-10], [2017-07-11] , [2017-07-12], [2017-07-13], [2017-07-14])
) pvt
14 июл 17, 11:37    [20643680]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7746
pr0b3l1987,

это прикладная задача на самом деле. Выше писали об этом. Т.е. PIVOT - то существует, но это для самых ленивых и это просто синтаксическая обертка запроса с группировкой. Повороты, "шахматки" выполняют клиентские приложения.
14 июл 17, 12:25    [20643957]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
Владислав Колосов,

Прощу прощения за глупый вопрос, что вы подразумеваете под клиентским приложением?
14 июл 17, 13:32    [20644278]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Remind
pr0b3l1987,

Решайте задачи отображения вашего отчета на клиенте. Разворачивать даты в столбцы это не задача SQL Server'a.


Не факт.
Может потребоваться дальнейшая обработка получившейся таблицы.
18 июл 17, 03:21    [20652179]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачку  [new]
982183
Member

Откуда: VL
Сообщений: 3352
pr0b3l1987
Владислав Колосов,

Прощу прощения за глупый вопрос, что вы подразумеваете под клиентским приложением?

Что "они" подразумевают, не знаю.
Но подобные отчеты замечательно делают немного обученные люди в EXEle
Создать весь спектр возможных выборок/группировок сложно и дорого.
А грамотный человек (товаровед/менеджер/аналитик), знающий предметную область и немного EXElя
сможет без труда из данного ему блока данных сварганить нужные ему циферки.
18 июл 17, 05:37    [20652195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить