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

Откуда:
Сообщений: 7
В общем перечитал, переискал много информации, но за несколько дней таких поисков я ничего не нашел, придумал сам кое что, но это выглядит не красиво и довольно таки слишком огромный код будет! В общем я решил обратится сюда! Итак имеется две таблицы табель и сотрудник, собственно говоря схема, ожидаемый результат и мой результат во вложении! и вот мой код
select sotr.id_sotr,sotr.fam,sotr.name,sotr.otch,one.d01m10g2015,two.d02m10g2015 
    from
        (select sotr.id_sotr,tabel.znach as d01m10g2015
            from sotr,tabel 
             where sotr.id_sotr=tabel.id_sotr and tabel.data='2015-10-01')
              as one,
        (select sotr.id_sotr,tabel.znach as d02m10g2015
            from sotr,tabel 
             where sotr.id_sotr=tabel.id_sotr and tabel.data='2015-10-02')
              as two,sotr
 where sotr.id_sotr=one.id_sotr and sotr.id_sotr=two.id_sotr              


Так вообще реально реализовать в запросе SQL ,как я в excele нарисовал?

К сообщению приложен файл. Размер - 135Kb
16 ноя 15, 21:14    [18426305]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
metalistik1
Так вообще реально реализовать в запросе SQL ,как я в excele нарисовал?
См. PIVOT

Или "переворачивать" на клиенте.
16 ноя 15, 21:34    [18426375]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
ПолиграфычПолиграф
Guest
Будь мужиком - возьми 1С !
16 ноя 15, 22:49    [18426686]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
metalistik1
Member

Откуда:
Сообщений: 7
ПолиграфычПолиграф, ахах а чем тебе здесь не мужиком?
17 ноя 15, 20:45    [18431904]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
metalistik1
Member

Откуда:
Сообщений: 7
alexeyvg, спасибо огромное, что дали направление действий
17 ноя 15, 20:45    [18431907]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
metalistik1
Member

Откуда:
Сообщений: 7
alexeyvg, дело в том, что данная функция используется только совместно со статической, из за этого у меня получаются значения NULL, в общем ужас, может я и в коде накосячил, но по другому я не вижу как сделать, потому что is not null всякое такое что то не поддерживается. А вот код
select id_sotr,[2015-10-01],[2015-10-02],[2015-10-03],[2015-10-04],[2015-10-05],[2015-10-06]
		from tabel
		pivot (max(znach)  for data in ("2015-10-01","2015-10-02","2015-10-03","2015-10-04","2015-10-05","2015-10-06")) as test
       
17 ноя 15, 21:39    [18432118]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
metalistik1
Member

Откуда:
Сообщений: 7
alexeyvg,
17 ноя 15, 21:40    [18432119]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
metalistik1
Member

Откуда:
Сообщений: 7
alexeyvg, а вот результат

К сообщению приложен файл. Размер - 30Kb
17 ноя 15, 21:41    [18432127]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
Александр Пузаков
Member

Откуда:
Сообщений: 1343
Картинка с другого сайта.
18 ноя 15, 08:32    [18433175]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1131
ИМХО
вывод информации, как у Вас показано в Excel, это не дело SQL. Так должен разворачивать отчет на стороне клиента, а сам SQL должен получать только исходные данные для него.

Либо, если есть желание, можно сделать динамический sql, когда строка запроса генерится какой-нибудь программой. Напрмер C#, либо 1С, но адъ. Меняйте задачу. Выворачивать должен клиент!
18 ноя 15, 09:51    [18433534]     Ответить | Цитировать Сообщить модератору
 Re: Формирование табеля  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
metalistik1
alexeyvg, дело в том, что данная функция используется только совместно со статической, из за этого у меня получаются значения NULL, в общем ужас, может я и в коде накосячил, но по другому я не вижу как сделать, потому что is not null всякое такое что то не поддерживается.
Я не знаю, что такое "используется только совместно со статической, из за этого у меня получаются значения NULL, в общем ужас" :-)
Но pivot позволяет получить результат без дублирования строк с одинаковым id_sotr

Смотрите примеры в хелпе, пробуйте.
Вот в BOL в разделе "PIVOT" есть "Сложный пример PIVOT"
Прямо такой запрос, как у вас.
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
FROM 
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [250], [251], [256], [257], [260] )
) AS pvt
ORDER BY pvt.VendorID;


И ещё - посмотрите всё таки эксель. Там точно есть свой PIVOT, просто поищите в всяких настройках, погуглите.
Руками там PIVOT делается просто из меню, ну и при получении внешних данных, я уверен, это тоже можно сделать.

Это будет и более просто, потому что сиквельный PIVOT потребует точного знания диапазона дат, а в эксете всё само правильно вычислится
18 ноя 15, 10:41    [18433880]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить