2017-01-30 4 views
2

Я новичок в языке sql и нуждаюсь в некоторой помощи для изменения данных.Альтернатива pivot

(Я работаю с SQL Server 2008)

У меня есть эта таблица (заменить):

 
iteid | substitutedescr | substitutecode 
37664 | EANCUTIE3  | 14902778788926 
37664 | EAN1    | 4902778788929 
37664 | EANCUTIE1  | 4902778931653 
37664 | EANCUTIE2  | 4902778931738 

и я хочу выбрать, чтобы выглядеть следующим образом:

 
iteid EAN1   EANCUTIE1   EANCUTIE2  EANCUTIE3 
37664              14902778788926 
37664 4902778788929   
37664     4902778931653  
37664          4902778931738 

I пытался использовать опорный стержень:

select * 
from (
      select iteid as [ID], substitutedescr as [descr], substitutecode  as [Values] 
      from substitute) as s 
PIVOT 
(
SUM(SUBSTITUTECODE) 
FOR [DESCR] in (ean1, ean2, ean3, eancutie1, eancutie2, eancutie3) 
) as pvt 

Но мне кажется, что мне нужно установить уровень совместимости на большее значение, чтобы активировать функцию поворота.

У меня есть другая альтернатива для получения этого результата?

спасибо.

ответ

5

Вам не нужно pivot для этого, просто case:

select iteid, 
     (case when substitutedescr = 'EAN1' then substitutecode end) as EAN1, 
     (case when substitutedescr = 'EANCUTIE1' then substitutecode end) as EANCUTIE1, 
     (case when substitutedescr = 'EANCUTIE2' then substitutecode end) as EANCUTIE2, 
     (case when substitutedescr = 'EANCUTIE3' then substitutecode end) as EANCUTIE3 
from substitute; 

Вы хотели бы pivot (или агрегирование), если вы хотите одну строку для каждого iteid со всеми значениями в этой строке. Например:

select iteid, 
     max(case when substitutedescr = 'EAN1' then substitutecode end) as EAN1, 
     max(case when substitutedescr = 'EANCUTIE1' then substitutecode end) as EANCUTIE1, 
     max(case when substitutedescr = 'EANCUTIE2' then substitutecode end) as EANCUTIE2, 
     max(case when substitutedescr = 'EANCUTIE3' then substitutecode end) as EANCUTIE3 
from substitute 
group by iteid; 
+0

Спасибо вам за ответ: D решила мою проблему. –

Смежные вопросы