2015-02-20 3 views
0

Я не уверен, как именно я хочу задать этот вопрос, поэтому я предоставлю данные и конечные результаты, которые я ищу.Преобразование некоторых строк в столбцы

Q Number | M Number | Date | Type | Result 
------------------------------------------------ 
Q-0005 | M-00099 | 2/2/15 | Pal  | 1 
Q-0005 | M-00099 | 2/2/15 | Pal  | 2 
Q-0007 | M-00095 | 2/2/15 | Pal  | 1 
Q-0007 | M-00095 | 2/1/15 | Pal  | 3 
Q-0005 | M-00099 | 2/1/15 | CompID | 25AD 
Q-0007 | M-00095 | 2/2/15 | CompID | 15AD 
Q-0005 | M-00099 | 2/1/15 | CompLO | ZYZ23 
Q-0007 | M-00095 | 2/2/15 | CompLO | ZYZ23 

Данные хранятся в SQL Server.

Однако я хотел бы иметь возможность сортировать по Type, и это результат. Итак, если бы я хотел найти Q-Number, где Pal = 1 and CompID = 25AD and CompLO = ZYZ23, я не могу найти способ поворота столбца Type, если это возможно.

Q Number | M Number | Date | PAL | CompID | CompLO 
------------------------------------------------------ 
Q-0005 | M-00099 | 2/2/15 | 1 | 25AD | ZYZ23 
Q-0005 | M-00099 | 2/2/15 | 2 | 25AD | ZYZ23 
Q-0005 | M-00099 | 2/2/15 | 3 | 25AD | ZYZ23 
Q-0007 | M-00095 | 2/1/15 | 3 | 15AD | ZYZ23 

Любая помощь будет оценена по достоинству.

Кевин
+0

Какая у вас база данных? – Mihai

+1

Возможный дубликат [Преобразование строк базы данных в столбцы] (http://stackoverflow.com/questions/1946234/convert-database-rows-into-columns) – GolezTrol

+0

Посмотрите на «кросс-таблицу» и/или «поворот» - есть партии документированных подходов. –

ответ

1

Вот пример того, как вы можете повернуть ваши данные ... Мой вывод не соответствует тому, что вы укажете в вашем примере, но я думаю, что вы сделали опечатку в столбце Дата в результате чего некоторые столбцы не группируются правильно.

Если в вашем примере набора данных нет опечатки, то, пожалуйста, дайте мне знать, как вы управляете вычислением вывода, предоставленного вами, и я обновлю свой ответ.

------------------------------------ 
-- Mock up the table and data... 
------------------------------------ 
create table #Table 
(
    QNumber CHAR(6), 
    MNumber CHAR(7), 
    Date DATE, 
    Type VARCHAR(20), 
    Result VARCHAR(20) 
); 
go 

insert into #Table(QNumber, MNumber, Date, Type, Result) 
values  ('Q-0005', 'M-00099', '2/2/15', 'Pal', '1'), 
      ('Q-0005', 'M-00099', '2/2/15', 'Pal', '2'), 
      ('Q-0007', 'M-00095', '2/2/15', 'Pal', '1'), 
      ('Q-0007', 'M-00095', '2/1/15', 'Pal', '3'), 
      ('Q-0005', 'M-00099', '2/1/15', 'CompID', '25AD'), 
      ('Q-0007', 'M-00095', '2/2/15', 'CompID', '15AD'), 
      ('Q-0005', 'M-00099', '2/1/15', 'CompLO', 'ZYZ23'), 
      ('Q-0007', 'M-00095', '2/2/15', 'CompLO', 'ZYZ23'); 
go 
------------------------------------ 

select  QNumber, 
      MNumber, 
      Date, 
      PAL  = MAX(case 
           when Type = 'PAL' then Result 
          end), 
      CompID = MAX(case 
          when Type = 'CompID' then Result 
         end), 
      CompLO = MAX(case 
          when Type = 'CompLO' then Result 
         end) 
from  #Table 
group by QNumber, MNumber, Date; 

Образец примера: sqlfiddle.

+0

Спасибо! Я сходил с ума, пытаясь найти сводный стол, намного более чистым. – Kevin

+0

@Kevin, без проблем! Да, поворот может быть болью, когда вам нужно поворачивать несколько столбцов. – animateme

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