Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
zink Member Откуда: Сообщений: 1 |
Есть две таблицы 1) CLR_ParamLinkMap 2) TableTagValues![]() Из них требуется сделать третью со столбцами PropertyName ![]() В голову пришел только 1 вариант с курсором внутри курсора, либо курсор и вставка значений через селекты: use TestDB if(object_id('[Tempdb].[dbo].[#t0]') is not null) drop table [#t0] create table [#t0] ( ID varchar(max) ,ObjParamID varchar(max) ,ClrParamName varchar(max) ,Value varchar(max) ,ItemName varchar(max) ,MainItemName varchar(max) ,PropertyName varchar(max) ,TimeStamp varchar(max) ) insert into #t0 select distinct * from CLR_ParamLinkMap c inner join TableTagValues as t on t.MainItemName = c.ClrParamName order by c.ID if(object_id('[Tempdb].[dbo].[#t1]') is not null) drop table [#t1] create table [#t1] ( prop1 varchar(max) ,prop2 varchar(max) ,prop3 varchar(max) ,prop4 varchar(max) ,prop5 varchar(max) ,prop6 varchar(max) ,prop7 varchar(max) ,prop8 varchar(max) ,prop9 varchar(max) ,ID varchar(max) ,ObjParamID varchar(max) ) DECLARE @ID varchar(max) declare @ObjParamID varchar(max) DECLARE @CURSOR CURSOR SET @CURSOR = CURSOR SCROLL FOR select distinct c.ID, c.ObjParamID from CLR_ParamLinkMap c inner join TableTagValues as t on t.MainItemName = c.ClrParamName order by c.ID OPEN @CURSOR FETCH NEXT FROM @CURSOR INTO @ID, @ObjParamID WHILE @@FETCH_STATUS = 0 BEGIN insert #t1(prop1,prop2,prop3,prop4,prop5,prop6,prop7,prop8,prop9, ID,ObjParamID) Values( (select distinct Value from #t0 where PropertyName = 'prop1' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop2' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop3' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop4' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop5' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop6' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop7' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop8' and ID = @ID and ObjParamID = @ObjParamID) ,(select distinct Value from #t0 where PropertyName = 'prop9' and ID = @ID and ObjParamID = @ObjParamID) ,@ID ,@ObjParamID) FETCH NEXT FROM @CURSOR INTO @ID, @ObjParamID END CLOSE @CURSOR DEALLOCATE @CURSOR select * from #t1 drop table #t0 drop table #t1 С точки зрения работоспособности, работает, но при большом объеме таблиц кажется, что будет очень долго. Подскажите, есть ли более элегантное и простое решение? |
6 авг 17, 19:25 [20703721] Ответить | Цитировать Сообщить модератору |
Remind Member Откуда: UK Сообщений: 523 |
zink, PIVOT |
6 авг 17, 19:34 [20703740] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |