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

Откуда:
Сообщений: 20
Добрый день!
Достался проект, где есть график работы сотрудников.
Таблица состоит из следующих 34 полей: ID_personal, god, month, day1, day2 ... day31
Т.е. есть 31 поле - это 31 день в месяце и в каждом поле проставлены часы работы сотрудников.
И теперь мне нужно значения из этих 34 полей собрать в три поля: ID_personal, Дата, Время.
Подскажите каким скриптом ?
1 апр 17, 18:11    [20357157]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из несколько полей в одно поле  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Алекс_1981
Подскажите каким скриптом ?
см. в доке UNPIVOT
1 апр 17, 18:17    [20357174]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из несколько полей в одно поле  [new]
Massa52
Member

Откуда:
Сообщений: 380
Алекс_1981,
with t AS
(SELECT 1 ID_personal, 2017 god, 1 [month], 8 day1, 8 day2, 8 day3, 8 day4, 8 day5, 0 day6, 0 day7, 8 day8, 8 day9, 8 day10 , 8 day11, 8 day12, 0 day13, 0 day14, 8 day15, 8 day16, 8 day17, 8 day18, 8 day19, 0 day20, 0 day21, 8 day22, 8 day23, 8 day24,8 day25, 8 day26,0 day27, 0 day28,8 day29, 8 day30,8 day31
   UNION ALL 
 SELECT 2 ID_personal, 2017 god, 2 [month], 8 day1, 8 day2, 0 day3, 0 day4, 8 day5, 8 day6, 8 day7, 8 day8, 8 day9, 0 day10 , 0 day11, 8 day12, 8 day13, 8 day14, 8 day15, 8 day16, 0 day17, 0 day18, 8 day19, 8 day20, 8 day21, 8 day22, 8 day23, 8 day24,0 day25, 0 day26,8 day27, 8 day28,0 day29, 0 day30,0 day31 
), c as
(
  SELECT ID_personal, god, [month], dayId, nHours  FROM t
     UNPIVOT (nHours FOR dayId IN(day1, day2, day3, day4, day5, day6, day7,day8,day9, day10 ,day11, day12, day13, day14, day15,day16, day17, day18, day19, day20, day21,day22,day23,day24,day25, day26,day27, day28,day29, day30,day31)) AS U
) 
SELECT ID_personal, 
      TRY_CONVERT(datetime,
	              CAST(god AS char(4))+  
	              RIGHT('0'+CAST([month] AS varchar(2)),2)+ 
	              RIGHT('0'+ CAST(SUBSTRING(dayId, 4,2) AS varchar(2)),2)),  nHours 
FROM c
2 апр 17, 04:53    [20357766]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить