2011-10-04 32 views
1

我有以下的結構和數據改變行組

ProductId #date  #customercode # SomeIndex # SomeIndexvalue 
13  2011-10-01  1   A1    9397062 
14  2011-10-01  2   A1    3575045 
15  2011-10-01  3   A1    3575321 
13  2011-10-01  1   A2    1318774 
14  2011-10-01  2   A2    838924 
15  2011-10-01  3   A2    8942430 

在該索引值的SQL查詢結果被用於的productid,日期,customercode唯一的。現在我需要將SomeIndex作爲列,以便在給定的數據中只有三行。即以下結構

ProductId #date  #customercode # A1  # A2 
13  2011-10-01  1   9397062 1318774 
14  2011-10-01  2   3575045 838924 
15  2011-10-01  3   3575321 8942430 

我正在使用sqlserver 2008.任何人都可以幫我解決這個問題。在此先感謝大家

+0

可能重複:http://stackoverflow.com/questions/1187460/sql-rows-to-columns – reggie

+0

@雷吉,是的,這些問題有相似之處。你可以發佈鏈接作爲答案,我會將其標記爲答案。這對其他人會有幫助 – Madhan

回答

1

與樞運營商(SQL 2008版)

create table #test(
ProductId int, 
dt date, 
customercode int, 
someindex varchar(255), 
SomeIndexvalue int 
) 

insert into #test values 
(13,'2011-10-01',1,'A1',9397062), 
(14,'2011-10-01',2,'A1',3575045), 
(15,'2011-10-01',3,'A1',3575321), 
(13,'2011-10-01',1,'A2',1318774), 
(14,'2011-10-01',2,'A2',838924), 
(15,'2011-10-01',3,'A2',8942430) 


select * from 
(
    select 
     * 
    from 
     #test 
)DATA_TO_PIVOT 
PIVOT 
(
MAX(SomeIndexvalue) for someindex in ([A1],[A2]) 
)PIVOTED_DATA  
1
SELECT ProductId, [#date], [#customercode], 
     MIN(CASE WHEN [#SomeIndex] = 'A1' THEN [#SomeIndexvalue] END) [#A1], 
     MIN(CASE WHEN [#SomeIndex] = 'A2' THEN [#SomeIndexvalue] END) [#A2] 
FROM YourTable 
GROUP BY ProductId, [#date], [#customercode]