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)
 Creating a pivot view

Author  Topic 

Rayzak
Starting Member

3 Posts

Posted - 2008-09-12 : 10:32:32
Hello Guys.
I need help please.

I have a TABLE:
NUMBER | ITEMCODE | FILENAME

and data like this:

1 | ITEMCODE1 | FILENAME1
2 | ITEMCODE1 | FILENAME2
3 | ITEMCODE1 | FILENAME3
4 | ITEMCODE2 | FILENAME1
5 | ITEMCODE2 | FILENAME2
6 | ITEMCODE2 | FILENAME3
7 | ITEMCODE2 | FILENAME4

How can I create a view in Enterprise Manager and output this table like:

ITEMCODE | FILENAME | FILENAME1 | FILENAME2 | FILENAME3 etc


I checked into PIVOTS but I guess I'm too dumb to figure it out by myself.

Please help

TG
Master Smack Fu Yak Hacker

6065 Posts

Posted - 2008-09-12 : 11:04:11
>>I checked into PIVOTS but I guess I'm too dumb to figure it out by myself.
That's the spirit!


use tempdb
go
create table t (NUMBER int, ITEMCODE varchar(15), FILENAME varchar(15))
insert t
select 1 , 'ITEMCODE1' , 'FILENAME1' union all
select 2 , 'ITEMCODE1' , 'FILENAME2' union all
select 3 , 'ITEMCODE1' , 'FILENAME3' union all
select 4 , 'ITEMCODE2' , 'FILENAME1' union all
select 5 , 'ITEMCODE2' , 'FILENAME2' union all
select 6 , 'ITEMCODE2' , 'FILENAME3' union all
select 7 , 'ITEMCODE2' , 'FILENAME4'

go
create view vw_t as

select ItemCode
,[FileName1] as [FileName1]
,[FileName2] as [FileName2]
,[FileName3] as [FileName3]
,[FileName4] as [FileName4]
from (select number, itemcode, FileName
from t) d
PIVOT (max(Number)
FOR [FileName] in (FileName1, FileName2, FileName3, FileName4)
) as p

go

select * from vw_t

go
drop view vw_t
drop table t

OUTPUT:
ItemCode FileName1 FileName2 FileName3 FileName4
--------------- ----------- ----------- ----------- -----------
ITEMCODE1 1 2 3 NULL
ITEMCODE2 4 5 6 7


Be One with the Optimizer
TG
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2008-09-13 : 13:43:03
You can also get it like this

SELECT t.ITEMCODE,
MAX(CASE WHEN t.Seq=1 THEN t.FILENAME ELSE NULL END) AS FILENAME1,
MAX(CASE WHEN t.Seq=2 THEN t.FILENAME ELSE NULL END) AS FILENAME2,
MAX(CASE WHEN t.Seq=3 THEN t.FILENAME ELSE NULL END) AS FILENAME3,
MAX(CASE WHEN t.Seq=4 THEN t.FILENAME ELSE NULL END) AS FILENAME4
FROM
(SELECT ROW_NUMBER() OVER(PARTITION BY ITEMCODE ORDER BY FILENAME) AS Seq,*
FROM YourTable)t
GROUP BY t.ITEMCODE
Go to Top of Page

madhivanan
Premature Yak Congratulator

22864 Posts

Posted - 2008-09-15 : 03:48:26
If the values of Filename are dynamic, try
http://sqlblogcasts.com/blogs/madhivanan/archive/2008/08/27/dynamic-pivot-in-sql-server-2005.aspx

Madhivanan

Failing to plan is Planning to fail
Go to Top of Page

Rayzak
Starting Member

3 Posts

Posted - 2008-09-17 : 14:53:41
Sorry, is there any way to perform this in SQL 2000? My filenames are dynamic.

Go to Top of Page

TG
Master Smack Fu Yak Hacker

6065 Posts

Posted - 2008-09-17 : 15:37:45
If you don't know how many columns (FILENAMEx) there will be then perhaps you should simply dump all the data to excel and use their pivot table functionality.
If you can decide on fixed set of possible FileNames then you can use a statement very similar to Visakh16. Just use the fileName in the CASE/WHEN statement instead of the row_number() function.

Also, pay attention to which forum you are posting in

EDIT:
Here is an old topic which may help:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=97874&SearchTerms=dynamic,cross,tab

Be One with the Optimizer
TG
Go to Top of Page
   

- Advertisement -