Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

преобразовать таблицу в строку   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
14-1117206004
lookin
2005-05-27 19:00
2005.06.29
27 мая - день вежливости на форуме


1-1117317253
kami
2005-05-29 01:54
2005.06.29
Drag&amp;drop из программы в проводник


1-1117968416
mr.Spok
2005-06-05 14:46
2005.06.29
Запись структуры в файл


1-1118127057
-=snoop=-
2005-06-07 10:50
2005.06.29
добавление объекта на форму через код....


1-1118051551
SergeiX
2005-06-06 13:52
2005.06.29
как убрать разбиение на страницы