Przedstawiam kod do transpozycji tabeli. Kiedyś potrzebowałem coś podobnego pod MS SQL Server 2000. Chciałem użyć Pivota ale ….to nie ta wersja.

Proszę o uwagi i ewentualne propozycje zmian.

CREATE TABLE #t("Nazwa" varchar(20),
 "Wartosc" int);

INSERT INTO #t VALUES ('KOLUMNA1',2);
INSERT INTO #t VALUES ('KOLUMNA2',4);
INSERT INTO #t VALUES ('KOLUMNA3',6);
INSERT INTO #t VALUES ('KOLUMNA4',8);

SELECT * FROM #t;
GO
DECLARE @sql AS NVARCHAR(2000)
DECLARE @sql2 AS NVARCHAR(2000)
DECLARE @nazwa AS nvarchar(30)
DECLARE @wartosc AS int
DECLARE @licznik INT
DECLARE @zn char(1)

SET @sql='create table db ('
SET @sql2= 'insert into db values ('
SET @licznik=0
SET @zn=CHAR(39);

DECLARE c1 CURSOR FOR
SELECT    Nazwa, Wartosc FROM #t  

OPEN c1

FETCH c1 INTO @nazwa,@wartosc
WHILE (@@fetch_status = 0)
 BEGIN
 SET @licznik=@licznik+1
 if @licznik>1
 BEGIN
 SET @sql=@sql+','   
 SET @sql2=@sql2+','  
 END     
 SET @sql= @sql +'"Nazwa'+ cast(@licznik AS nvarchar(3))+'" varchar(30), "Wartosc'+cast(@licznik AS nvarchar(3))+'" int'
 SET @sql2=@sql2+@zn+ @nazwa+@zn+','+CAST(@wartosc AS varchar(10))  
 FETCH c1 INTO  @nazwa,@wartosc
 END
 SET @sql=@sql+')'
 SET @sql2=@sql2+')'

CLOSE c1
DEALLOCATE c1

print @sql
print @sql2

EXEC sp_executesql @sql
EXEC sp_executesql @sql2
SELECT * FROM db

DROP TABLE #t
DROP TABLE db

Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl