Reputation: 366
I just want to transpose following table
RegionID Region RedionCode RegionSupervisor
1 Eastern E01 Mark
2 Western W01 Jim
3 Northern N01 Paul
4 Southern S01 David
to
Eastern Western Northern Southern
1 2 3 4
E01 W01 N01 S01
Mark Jim Paul David
I use SQL 2008. Any help would be really appreciated
cheers!
Upvotes: 3
Views: 2674
Reputation: 359
You can use PIVOT, but you will also need to incorporate dynamic SQL, as PIVOT by itself will only support situations where you know in advance the full set of columns in the resultant table. Pivots with Dynamic Columns in SQL Server 2005
Upvotes: 1
Reputation: 366
Ok guys, finally I found a way of doing it but possibly not the more effective way. I could not find a solution with PIVOT yet
BEGIN
DECLARE @ColumnList varchar(200)
DECLARE @ColumnInList varchar(200)
DECLARE @TableName varchar(20)
DECLARE @TableScript varchar(2000)
SET @ColumnList = ''
SET @ColumnInList = ''
SELECT @ColumnInList += RTRIM(RegionDescription) + ',', @ColumnList += '[' + RTRIM(RegionDescription) + '] varchar(50) , '
FROM RegionSup
SET @ColumnList = LEFT(@ColumnList, LEN(@ColumnList) - 1)
SET @ColumnInList = LEFT(@ColumnInList, LEN(@ColumnInList) - 1)
SELECT @TableName = 'TEMP' + CONVERT(char(12),GETDATE(),14);
SELECT @TableName = REPLACE(@TableName,':','')
SET @TableScript = 'CREATE TABLE ' + @TableName + ' (' +
@ColumnList + ')'
EXECUTE (@TableScript)
--Column Values
DECLARE @RegionID varchar(30)
DECLARE @RegionSupervisor varchar(50)
DECLARE @RegionCode varchar(50)
--End Column Values
SET @RegionID = ''
SET @RegionSupervisor = ''
SET @RegionCode = ''
SELECT @RegionID += '''' + CONVERT(varchar(10),RegionID) + ''',',
@RegionSupervisor += '''' + RegionSupervisor + ''',',
@RegionCode += '''' + RegionCode + ''','
FROM RegionSup
SET @RegionID = LEFT(@RegionID,LEN(@RegionID) - 1)
SET @RegionSupervisor = LEFT(@RegionSupervisor,LEN(@RegionSupervisor) - 1)
SET @RegionCode = LEFT(@RegionCode,LEN(@RegionCode) - 1)
DECLARE @InsertStatement nvarchar(max)
SET @InsertStatement = ''
SET @InsertStatement = 'INSERT INTO ' + @TableName + '(' + @ColumnInList + ') VALUES ' +
'(' + @RegionID + '),' +
'(' + @RegionSupervisor + '),' +
'(' + @RegionCode + ')'
EXECUTE(@InsertStatement)
EXECUTE('SELECT * FROM ' + @TableName)
EXECUTE('DROP TABLE ' + @TableName)
END
Upvotes: 0