2011-10-04 30 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]