изменение группы строк в столбец - PullRequest
1 голос
/ 04 октября 2011

У меня есть результат запроса sql со следующей структурой и данными

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  

В этом индексе значение уникально для продукта, даты, кода клиента. Теперь мне нужно сделать 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. Может кто-нибудь помочь мне в этом. Спасибо всем заранее

Ответы [ 2 ]

1 голос
/ 04 октября 2011

С оператором PIVOT (версия 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 голос
/ 04 октября 2011
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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...