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

Откуда:
Сообщений: 365
Есть таблица табеля (импорт из DBF)
CREATE TABLE [dbo].[tabel1](
	[IsDeletedSystem] [bit] NULL,
	[NOMER] [decimal](4, 0) NULL,
	[MES] [varchar](2) NULL,
	[GOD] [varchar](4) NULL,
	[GRAFIC] [decimal](2, 0) NULL,
	[NG] [varchar](2) NULL,
	[NOM_PDR] [varchar](2) NULL,
	[KR] [varchar](1) NULL,
	[TAB_NOM] [varchar](4) NULL,
	[SPISOK] [decimal](1, 0) NULL,
	[OTR_GRA] [decimal](6, 2) NULL,
	[OTR_DNI] [decimal](2, 0) NULL,
	[D1] [decimal](4, 1) NULL,
	[D2] [decimal](4, 1) NULL,
	[D3] [decimal](4, 1) NULL,
	[D4] [decimal](4, 1) NULL,
	[D5] [decimal](4, 1) NULL,
	[D6] [decimal](4, 1) NULL,
	[D7] [decimal](4, 1) NULL,
	[D8] [decimal](4, 1) NULL,
	[D9] [decimal](4, 1) NULL,
	[D10] [decimal](4, 1) NULL,
	[D11] [decimal](4, 1) NULL,
	[D12] [decimal](4, 1) NULL,
	[D13] [decimal](4, 1) NULL,
	[D14] [decimal](4, 1) NULL,
	[D15] [decimal](4, 1) NULL,
	[D16] [decimal](4, 1) NULL,
	[D17] [decimal](4, 1) NULL,
	[D18] [decimal](4, 1) NULL,
	[D19] [decimal](4, 1) NULL,
	[D20] [decimal](4, 1) NULL,
	[D21] [decimal](4, 1) NULL,
	[D22] [decimal](4, 1) NULL,
	[D23] [decimal](4, 1) NULL,
	[D24] [decimal](4, 1) NULL,
	[D25] [decimal](4, 1) NULL,
	[D26] [decimal](4, 1) NULL,
	[D27] [decimal](4, 1) NULL,
	[D28] [decimal](4, 1) NULL,
	[D29] [decimal](4, 1) NULL,
	[D30] [decimal](4, 1) NULL,
	[D31] [decimal](4, 1) NULL,
	[S1] [varchar](1) NULL,
	[S2] [varchar](1) NULL,
	[S3] [varchar](1) NULL,
	[S4] [varchar](1) NULL,
	[S5] [varchar](1) NULL,
	[S6] [varchar](1) NULL,
	[S7] [varchar](1) NULL,
	[S8] [varchar](1) NULL,
	[S9] [varchar](1) NULL,
	[S10] [varchar](1) NULL,
	[S11] [varchar](1) NULL,
	[S12] [varchar](1) NULL,
	[S13] [varchar](1) NULL,
	[S14] [varchar](1) NULL,
	[S15] [varchar](1) NULL,
	[S16] [varchar](1) NULL,
	[S17] [varchar](1) NULL,
	[S18] [varchar](1) NULL,
	[S19] [varchar](1) NULL,
	[S20] [varchar](1) NULL,
	[S21] [varchar](1) NULL,
	[S22] [varchar](1) NULL,
	[S23] [varchar](1) NULL,
	[S24] [varchar](1) NULL,
	[S25] [varchar](1) NULL,
	[S26] [varchar](1) NULL,
	[S27] [varchar](1) NULL,
	[S28] [varchar](1) NULL,
	[S29] [varchar](1) NULL,
	[S30] [varchar](1) NULL,
	[S31] [varchar](1) NULL


D - это часы за день , S - причина присутствия (отсутствия)

Надо привести к виду
CREATE TABLE [dbo].[TabelPivot](
	[nomer] [decimal](4, 0) NULL,
	[nom_pdr] [varchar](2) NULL,
	[kr] [varchar](1) NULL,
	[TAB_NOM] [varchar](4) NULL,
	[begdate] [date] NULL,
	[hours] [int] NOT NULL,
	[reason] [varchar](1) NULL,
	[id] [int] NULL
) ON [PRIMARY]


Одно значение D я cмог привести с помощью UNPIVOT , а два вмести не получается , приходится делать танцы с бубном с помощью второго UNPIVOT . Может кто- то подскажет как их сделать сразу одним запросом
17 окт 12, 17:08    [13335679]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
GO
17 окт 12, 17:11    [13335709]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
philips
Member

Откуда:
Сообщений: 365
Спасибо но мне нужно одновременно 2 значения
часы и причины
Одно я уже сделал
17 окт 12, 17:13    [13335723]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
Glory
Member

Откуда:
Сообщений: 104751
philips
Спасибо но мне нужно одновременно 2 значения
часы и причины
Одно я уже сделал

А Emp1, Emp2, Emp3, Emp4, Emp5 - это сколько по вашему значений ?

Сообщение было отредактировано: 17 окт 12, 17:18
17 окт 12, 17:18    [13335752]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
philips
Member

Откуда:
Сообщений: 365
Вы не поняли -
мне надо 2 UNPIVOT

типа

SeLECT   TAB_NOM,cdate, hours, reason
from 
(SELECT tab_nom, S1 as '01' , S2 as '02', S3 as '03', S4 as '04', S5 as '05',
S6 as '06', S7 as '07',  S8 as '08', S9 as '09',  S10 as '10', S11 as '11', S12 as '12', S13 as '13', S14 as '14', S15 as '15'
, S16 as '16', S17 as '17', S18 as '18', S19 as '19', S20 as '20'
, S21 as '21', S22 as '22', S23 as '23', S24 as '24', S25 as '25', S26 as '26', S27 as '27', S28 as '28', S29 as '29', S30 as '30',S31 as '31'
FROM         tabel) t
UNPIVOT 
(reason for cdate
IN   ( [01] ,[02], [03], [04], [05], [06], [07], [08], [09],[10],[11],[12]
,[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])
 ) as unp 
UNPIVOT 
(hours for cdate
IN   ( [01] ,[02], [03], [04], [05], [06], [07], [08], [09],[10],[11],[12]
,[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])
 ) as unp1
17 окт 12, 17:27    [13335832]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
вы просто сделайте union all в секции фром
17 окт 12, 17:29    [13335857]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
Glory
Member

Откуда:
Сообщений: 104751
philips
Вы не поняли -
мне надо 2 UNPIVOT

Ну так пишите 2, если нужно 2
17 окт 12, 17:29    [13335862]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
пример
17 окт 12, 17:34    [13335895]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
philips
Member

Откуда:
Сообщений: 365
Пример хороший но уменя прямо противоположный - надо строки развернуть в столбцы
17 окт 12, 17:47    [13335984]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
philips
Вы не поняли -
мне надо 2 UNPIVOT

типа


5-й результат в поиске https://www.google.ru/search?q=unpivot: http://mangalpardeshi.blogspot.com/2009/04/unpivot-multiple-columns.html
17 окт 12, 17:59    [13336066]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Minamoto
philips
Вы не поняли -
мне надо 2 UNPIVOT

типа


5-й результат в поиске https://www.google.ru/search?q=unpivot: http://mangalpardeshi.blogspot.com/2009/04/unpivot-multiple-columns.html
С одним добавлением - поскольку у вас количество цифр в названии колонки - переменное, лучше последнее условие заменить на такое:

WHERE replace(reason,'S','') =  replace(hours ,'D','')
17 окт 12, 18:15    [13336136]     Ответить | Цитировать Сообщить модератору
 Re: SQL2008R2 UNPIVOT табеля  [new]
philips
Member

Откуда:
Сообщений: 365
Спасибо, с 5 раза все получилось
18 окт 12, 09:25    [13338173]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить