Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Развернуть колонки в строки (число прочтений - 2253 )
Maxo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 28. Декабря 2006
Развернуть колонки в строки
13. Декабря 2010 :: 09:05
Печать  
Есть документ Табель, в котором 31 поле с данными по дню,
Подскажите как средствами SQL  сформировать таблицу формата:
1. Таб номер
2. День
3. Значение дня

объединять 31 таблицу - самый простой вариант, может есть у кого-нибудь более изящный вариант?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Развернуть колонки в строки
Ответ #1 - 13. Декабря 2010 :: 09:33
Печать  
т.е у тебя 31 реквизит  в табличной части ?
Типа день1,день2....день31 ?
Или что ?

  
Наверх
 
IP записан
 
Maxo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 28. Декабря 2006
Re: Развернуть колонки в строки
Ответ #2 - 13. Декабря 2010 :: 09:38
Печать  
Да у меня есть ден1, день2 ... день31 и мне надо эти дни перенести в строки
В 2005 SQL  есть такая функция PIVOT, а в 2000 нет
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Развернуть колонки в строки
Ответ #3 - 13. Декабря 2010 :: 10:21
Печать  
Тут только рученьками, через case какой-нить задавать соответствие имени табличке с полем + cross join c этой табличкой, для транспонирования..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Развернуть колонки в строки
Ответ #4 - 13. Декабря 2010 :: 10:32
Печать  
Тип того:

Код
Выбрать все
select *
from (
    select
	  Док.LineNo_,ТабличкаДней.Ид,
	  case ТабличкаДней.Ид
	    when 'День1' then $Док.День1
	    when 'День2' then $Док.День2

	    .....
	    when 'День31' then $Док.День31
	   end as Показатель
     from
	   $ДокументСтроки.Табель as Док
     Cross join (
	    Select 'День1' as Ид  
	    Union all
	    Select 'День2'
	     .........
	    Union all
	    Select 'День31'
	  )  as ТабличкаДней
     where док.iddoc = :ВыбДок
    ) as d
where Показатель is not null 



Ну а дальше, группируй, суммируй, если надо..
Или всё в функцию оберни..
  
Наверх
 
IP записан
 
Maxo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 28. Декабря 2006
Re: Развернуть колонки в строки
Ответ #5 - 14. Декабря 2010 :: 04:55
Печать  
Спасибо, пойду засучу рукава
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать