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