Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Внизпреобразовать таблицу в строку Найти похожие ветки
← →
MakNik (2005-05-13 10:03) [0]... есть таблица:
IDU Val
--- ---
1 1
1 2
2 1
2 2
2 3
...
нужно получить:
IDU Val1 Val2 Val3
--- --- --- ---
1 1 2
2 1 2 3
...
количество значений Val в результирующей таблице не больше 32
Подскажите, плз., как написать такой запрос?
← →
Sergey13 © (2005-05-13 10:07) [1]А почему бы на клиенте не развернуть как хочется? Некоторые генераторы отчетов такое тоже умеют самостоятельно.
← →
stone © (2005-05-13 10:10) [2]Такой запрос нужно строить динамически, в цикле формировать строку запроса. Это можно сделать как на клиентской части, так и оформить на сервере в качестве процедуры.
← →
Anatoly Podgoretsky © (2005-05-13 10:15) [3]Хранимая процедура
← →
MakNik (2005-05-13 10:34) [4]... принцип как нужно сделать я понимаю, а вот реализовать не получается...
...хотелось бы сделать что-то типа такого:Declare @Tmp Table (ID_Fond uniqueIdentifier
, PlanV1 float, PlanV2 float, PlanV3 float, PlanV4 float, PlanV5 float, PlanV6 float, PlanV7 float, PlanV8 float, PlanV9 float, PlanV10 float
, PlanV11 float, PlanV12 float, PlanV13 float, PlanV14 float, PlanV15 float, PlanV16 float, PlanV17 float, PlanV18 float, PlanV19 float, PlanV20 float
, PlanV21 float, PlanV22 float, PlanV23 float, PlanV24 float, PlanV25 float, PlanV26 float, PlanV27 float, PlanV28 float, PlanV29 float, PlanV30 float
, PlanV31 float, PlanV32 float
, TabV1 float, TabV2 float, TabV3 float, TabV4 float, TabV5 float, TabV6 float, TabV7 float, TabV8 float, TabV9 float, TabV10 float
, TabV11 float, TabV12 float, TabV13 float, TabV14 float, TabV15 float, TabV16 float, TabV17 float, TabV18 float, TabV19 float, TabV20 float
, TabV21 float, TabV22 float, TabV23 float, TabV24 float, TabV25 float, TabV26 float, TabV27 float, TabV28 float, TabV29 float, TabV30 float
, TabV31 float, TabV32 float
, ID Int IDENTITY (1, 1))
Insert Into @Tmp
Select ID
, null, null, null, null, null, null, null, null, null, null
, null, null, null, null, null, null, null, null, null, null
, null, null, null, null, null, null, null, null, null, null
, null, null
, null, null, null, null, null, null, null, null, null, null
, null, null, null, null, null, null, null, null, null, null
, null, null, null, null, null, null, null, null, null, null
, null, null
from Fond
Declare @TopNo int
Declare @BotNo int
Set @TopNo=0
Set @BotNo=0
Select top 1 @TopNo=ID from @Tmp order by ID ASC
Select Top 1 @BotNo=ID from @Tmp order by ID Desc
Declare @TT Table(ID_TT int, PlanV float, TabV float, ID Int IDENTITY (1, 1))
Declare @SubTopNo int
Declare @SubBotNo int
Declare @ID_Fond UniqueIdentifier
Declare @ID_TT int
Declare @PlanV float
Declare @TabV float
DECLARE @SQLString NVARCHAR(500)
While @TopNo<=@BotNo
begin
Select @ID_Fond=ID_Fond from @Tmp where ID=@TopNo
Select @TopNo=@TopNo+1
Delete from @TT
Insert Into @TT
Select ID,PlanV,TabV
from TT
Where ID_Fond=@ID_Fond
Order by ID
Set @SubTopNo=0
Set @SubBotNo=0
Select top 1 @SubTopNo=ID from @TT order by ID ASC
Select Top 1 @SubBotNo=ID from @TT order by ID Desc
While @SubTopNo<=@SubBotNo
begin
Select @ID_TT=ID_TT, @PlanV=PlanV, @TabV=TabV from @TT where ID=@SubTopNo
Select @SubTopNo=@SubTopNo+1
--в этом месте хотелось бы сделать что-то типа такого:
SET @SQLString =N"Update @Tmp Set PlanV"+Convert(nvarchar(2),@ID_TT)+"="+Convert(nvarchar(5),@PlanV)+",TabV"+Convert(nvarchar(2),@ID_TT)+"="+Convert(nvarc har(5),@TabV)
Exec (@SQLString)
End
End
Select * from @Tmp
помогите, плз., доделать (переделать) код до работоспособного!
← →
stone © (2005-05-13 11:09) [5]ну навертел :)) ничего не понятно... проще надо:
declare
@SQL varchar(8000),
@Val int
set @SQL = "select distinct IDU"
declare Cur cursor for select distinct Val from Table1 open Cur
fetch next from Cur into @Val
while (@@FETCH_STATUS = 0)
begin
set @SQL = @SQL + ",Val" + Cast(@Val as varchar(2)) + "=(select t1.Val from Table1 t1 where t1.IDU = t2.IDU and t1.Val=" +
Cast(@Val as varchar(2)) + ")"
fetch next from Cur into @Val
end
close Cur deallocate Cur
set @SQL = @SQL + " from Table1 t2 order by IDU"
exec(@SQL)
← →
sniknik © (2005-05-13 11:56) [6]посмотри еще BOL по pivot table.
← →
MakNik (2005-05-13 13:01) [7]
> sniknik © (13.05.05 11:56) [6]
> посмотри еще BOL по pivot table.
... спасибо, этот вариант, совместно с ф-цией exec работает в 12 раз быстрее всех рассмотренных в этой теме вариантов.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.061 c