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

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
если бы исходная таблица была бы доступна извне хранимки можно было бы функцией посчитать список проектов, но исходные данные в табличной переменной...

Исходные данные:

project d1 d2 d3 d31
Проект1 0 8 6
Проект2 0 0 0 8
проект3 8 0 2


желаемый результат

d1 d2 d3 d31
проект3 Проект1 Проект1;Проект3 Проект2
21 фев 05, 11:09    [1334507]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть данные внутри хранимки  [new]
KOLCHOZ_POSTEVENT
Guest
Надо только не лениться долбить код
drop table #T
go
declare  @W table(project varchar(200),d1 int,d2 int,d3 int,d31 int)

insert into @W select 'Project1',0,8,6,0
insert into @W select 'Project2',0,0,0,8
insert into @W select 'Project3',8,0,2,0


declare @S1 varchar(200),@S2 varchar(200),@S3 varchar(200),@S31 varchar(200)
select @S1='',@S2='',@S3='',@S31=''

select  
@S1=@S1+ project+' '
from @W 
where   d1<>0 

select
@S2=@S2+ project+' '
from @W 
where   d2<>0 

select
@S3=@S3+ project+' '
from @W 
where   d3<>0 

select
@S31=@S31+ project+' '
from @W 
where   d31<>0 

select @S1 d1,@S2 d2,@S3 d3,@S31 d31 into #T

select * from #T
21 фев 05, 13:06    [1335055]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть данные внутри хранимки  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
получилось вот что:
ALTER PROCEDURE sotr_project_statusInfo (@Start_date datetime ='20040601'  , @id_p_f_p	int = 11 , 	@id_sotr	int = 1042)
AS

-- Процедура выдает название проектов в котором занят данный сотрудник в запрашиваем месяце, кроме обозначенного проекта


SET NOCOUNT ON 
declare @idpltime int
declare @SRC table ( idpltime int ,info varchar (100), 	d1 int , d2 int , d3 int , d4 int , d5 int , d6 int , d7 int , d8 int , d9 int , d10 int , 
			d11 int , d12 int , d13 int , d14 int , d15 int , d16 int , d17 int , d18 int , d19 int , d20 int , 
			d21 int , d22 int , d23 int , d24 int , d25 int , d26 int , d27 int , d28 int , d29 int , d30 int , 
			d31 int )
-- выфильтровывавываем интересующие записи
insert into @src 
select  			pt.id,
			saved_clientname collate SQL_Latin1_General_CP1251_CI_AS + char(13) + char(10)  + prj  as info,
			d1  , d2  , d3  , d4  , d5  , d6  , d7  , d8  , d9  , d10  , 
			d11  , d12  , d13  , d14  , d15  , d16  , d17  , d18  , d19  , d20  , 
			d21  , d22  , d23  , d24  , d25  , d26  , d27  , d28  , d29  , d30  , 
			d31
from dbo.pltime pt inner join dbo.partners_fplan_prop fp on id_p_f_p = idpartners_fplan_prop   where  pt.sumh <> 0  AND pt.id_sotr = @id_sotr and pt.start_date = @start_date  and id_p_f_p <> @id_p_f_p


declare @curstatus table (	d1 varchar(300) , d2 varchar(300) , d3 varchar(300) , d4 varchar(300) , d5 varchar(300) , d6 varchar(300) , d7 varchar(300) , d8 varchar(300) , d9 varchar(300) , d10 varchar(300) , 
			d11 varchar(300) , d12 varchar(300) , d13 varchar(300) , d14 varchar(300) , d15 varchar(300) , d16 varchar(300) , d17 varchar(300) , d18 varchar(300) , d19 varchar(300) , d20 varchar(300) , 
			d21 varchar(300) , d22 varchar(300) , d23 varchar(300) , d24 varchar(300) , d25 varchar(300) , d26 varchar(300) , d27 varchar(300) , d28 varchar(300) , d29 varchar(300) , d30 varchar(300) , 
			d31 varchar(300) 			
			)





insert  @curstatus (d1) values ('')

DECLARE src_cursor CURSOR FOR 
SELECT idpltime fROM @src
OPEN src_cursor 
FETCH NEXT FROM src_cursor INTO @idpltime 
WHILE @@FETCH_STATUS = 0 
BEGIN 
	update @curstatus set
	d1 = 	isnull(cs.d1,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d1 	as varchar(2)) + 'ч.) ' + info + char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D1 <> 0  )  ,  ''  ) ,
	d2 = 	isnull(cs.d2,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d2 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D2 <> 0  )  ,  ''  ) ,
	d3 = 	isnull(cs.d3,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d3 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D3 <> 0  )  ,  ''  ) ,
	d4 = 	isnull(cs.d4,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d4 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D4 <> 0  )  ,  ''  ) ,
	d5 = 	isnull(cs.d5,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d5 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D5 <> 0  )  ,  ''  ) ,
	d6 = 	isnull(cs.d6,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d6 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D6 <> 0  )  ,  ''  ) ,
	d7 = 	isnull(cs.d7,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d7 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D7 <> 0  )  ,  ''  ) ,
	d8 = 	isnull(cs.d8,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d8 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D8 <> 0  )  ,  ''  ) ,
	d9 = 	isnull(cs.d9,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d9 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D9 <> 0  )  ,  ''  ) ,
	d10 = 	isnull(cs.d10,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d10 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D10 <> 0  )  ,  ''  ) ,
	d11 = 	isnull(cs.d11,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d11 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D11 <> 0  )  ,  ''  ) ,
	d12 = 	isnull(cs.d12,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d12 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D12 <> 0  )  ,  ''  ) ,
	d13 = 	isnull(cs.d13,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d13 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D13 <> 0  )  ,  ''  ) ,
	d14 = 	isnull(cs.d14,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d14 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D14 <> 0  )  ,  ''  ) ,
	d15 = 	isnull(cs.d15,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d15	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)		from @SRC pt   where @idpltime = pt.idpltime  and pt.D15 <> 0  )  ,  ''  ) ,
	d16 = 	isnull(cs.d16,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d16 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D16 <> 0  )  ,  ''  ) ,
	d17 = 	isnull(cs.d17,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d17 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D17 <> 0  )  ,  ''  ) ,
	d18 = 	isnull(cs.d18,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d18 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D18 <> 0  )  ,  ''  ) ,
	d19 = 	isnull(cs.d19,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d19 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D19 <> 0  )  ,  ''  ) ,
	d20 = 	isnull(cs.d20,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d20 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D20 <> 0  )  ,  ''  ) ,
	d21 = 	isnull(cs.d21,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d21 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D21 <> 0  )  ,  ''  ) ,
	d22 = 	isnull(cs.d22,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d22 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D22 <> 0  )  ,  ''  ) ,
	d23 = 	isnull(cs.d23,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d23 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D23 <> 0  )  ,  ''  ) ,
	d24 = 	isnull(cs.d24,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d24 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D24 <> 0  )  ,  ''  ) ,
	d25 = 	isnull(cs.d25,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d25 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D25 <> 0  )  ,  ''  ) ,
	d26 = 	isnull(cs.d26,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d26 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D26 <> 0  )  ,  ''  ) ,
	d27 = 	isnull(cs.d27,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d27 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D27 <> 0  )  ,  ''  ) ,
	d28 = 	isnull(cs.d28,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d28 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D28 <> 0  )  ,  ''  ) ,
	d29 = 	isnull(cs.d29,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d29 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D29 <> 0  )  ,  ''  ) ,
	d30 = 	isnull(cs.d30,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d30 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D30 <> 0 )  ,  ''  ) ,
	d31 = 	isnull(cs.d31,'')  	+ isnull((select   '---------------' + char(13) + char(10) + '(' + cast(d31 	as varchar(2)) + 'ч.) ' + info +  char(13) + char(10)   	from @SRC pt   where @idpltime = pt.idpltime  and pt.D31 <> 0  )  ,  ''  ) 
	from  @curstatus cs
	FETCH NEXT FROM src_cursor INTO @idpltime
END 
CLOSE src_cursor 
DEALLOCATE src_cursor 

select *   from @curstatus
	RETURN


не нравится что приходится делать подзапросов по 31 полю.
а как подставить в цикле имя поля (внутри хранимки проблемно с динамическим sql ?) не знаю ... может кто подскажет?
21 фев 05, 13:41    [1335200]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть данные внутри хранимки  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Внутри хранимой процедуры можно делать динамические запросы.
21 фев 05, 15:32    [1335792]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть данные внутри хранимки  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Вот тут ссылки и примеры были: https://www.sql.ru/forum/actualthread.aspx?tid=152841
21 фев 05, 15:34    [1335805]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить