Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2005 Forums
 Transact-SQL (2005)
 Transpose Rows to Columns

Author  Topic 

coagulance
Yak Posting Veteran

78 Posts

Posted - 2008-04-23 : 16:51:21
I have the below table:
Pallet1 ItemA1
Pallet1 ItemB1
Pallet1 ItemC1
Pallet1 ItemD1
Pallet1 ItemE1
Pallet2 ItemA2
Pallet2 ItemB2
Pallet2 ItemC2
Pallet2 ItemD2


Would like to Transpose it to
Pallet 1 ItemA1 ItemB1 ItemC1 ItemD1 ItemE1
Pallet 2 ItemA2 ItemB2 ItemC2 ItemD2 NULL

Would be thankful for Any help.

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2008-04-24 : 00:30:33
If the number of items are static then use:-

SELECT t.Pallet,
MAX(CASE WHEN t.RowNo=1 THEN t.Item ELSE NULL END) AS Item1,
MAX(CASE WHEN t.RowNo=2 THEN t.Item ELSE NULL END) AS Item2,
MAX(CASE WHEN t.RowNo=3 THEN t.Item ELSE NULL END) AS Item3,
MAX(CASE WHEN t.RowNo=4 THEN t.Item ELSE NULL END) AS Item4,
MAX(CASE WHEN t.RowNo=5 THEN t.Item ELSE NULL END) AS Item5
FROM
(SELECT ROW_NUMBER() OVER(PARTITION BY Pallet ORDER BY Item) AS RowNo,
Pallet,Item
FROM Table)t
GROUP BY t.Pallet


If item number is not static use d-sql with pivot:-

CREATE table #table
(
Pallet varchar(20),
Item varchar(20)
)

INSERT INTo #table
SELECT 'Pallet1','ItemA1'
UNION ALL
SELECT 'Pallet1', 'ItemB1'
UNION ALL
SELECT 'Pallet1', 'ItemC1'
UNION ALL
SELECT 'Pallet1', 'ItemD1'
UNION ALL
SELECT 'Pallet1', 'ItemE1'
UNION ALL
SELECT 'Pallet2', 'ItemA2'
UNION ALL
SELECT 'Pallet2', 'ItemB2'
UNION ALL
SELECT 'Pallet2', 'ItemC2'
UNION ALL
SELECT 'Pallet2', 'ItemD2'


DECLARE @IDlist varchar(1000),@Sql varchar(max)
SELECT @IDlist =REPLACE(LEFT(il.idlist,LEN(il.idlist)-1),',','],[')
FROM
(
SELECT DISTINCT CAST(t.RowNo AS varchar(4)) + ','
from(
SELECT ROW_NUMBER() OVER(PARTITION BY Pallet ORDER BY Item) AS RowNo,
Pallet,Item
FROM #table)t
FOR XML PATH('')
)il(idlist)

SET @Sql='SELECT
* FROM
(SELECT ROW_NUMBER() OVER(PARTITION BY Pallet ORDER BY Item) AS RowNo,
Pallet,Item
FROM #table)m
PIVOT (MAX(Item) FOR RowNo IN ([' + @IDlist + ']))p'

EXEC (@Sql)


EDIT:missed braces
Go to Top of Page

coagulance
Yak Posting Veteran

78 Posts

Posted - 2008-04-24 : 01:29:09
Thank you so much Visakh
Go to Top of Page
   

- Advertisement -