--====== TEST DATA SET-UP =================
if object_id('dbo.pvt') is not null
drop table dbo.pvt;
create table dbo.pvt
(
reckey varchar(10),
amt1 decimal(8,2),
amt2 decimal(8,2),
amt3 decimal(8,2),
amt4 decimal(8,2),
amt5 decimal(8,2)
);
insert dbo.pvt values ( 'ABCD1234', 44.92, 14.4, 22, 0, 11.52 );
insert dbo.pvt values ( 'ABCD5678', 3.12, 17.7, 0, 13, 100.5 );
/*
I'm trying to use the t-sql Unpivot statement to create this:
reckey amtnumber amt
ABCD1234 1 44.92
ABCD1234 2 14.4
ABCD1234 3 22
ABCD1234 4 0
ABCD1234 5 11.52
*/
--====== SOLUTIONS =================
-- SQL 2005: Unpivot the table.
SELECT reckey, amtnumber, amt
FROM
(SELECT reckey, amt1, amt2, amt3, amt4, amt5
FROM pvt) p
UNPIVOT
(amt FOR amtnumber IN
(amt1, amt2, amt3, amt4, amt5)
)AS unpvt;
-- SQL 2008: You can use Cross Apply:
SELECT reckey, amtnumber, amt
FROM dbo.pvt
CROSS APPLY (
VALUES (1, amt1)
,(2, amt2)
,(3, amt3)
,(4, amt4)
,(5, amt5)
) a(amtnumber, amt);