2014-04-22 2 views
0

мне нужна помощь с запросом, чтобы помочь мне сделать следующее:Pivot один столбец с в несколько столбцов

Я хочу взять ниже формат:

SalesOrderNumber CustomName  Status Start  End   CrewName 
29002    Turner, Linda Closed 2014-01-22 2014-01-24 Espinoza,H. 
29002    Turner, Linda Closed 2014-01-22 2014-01-24 Severt,C. 
29002    Turner, Linda Closed 2014-01-22 2014-01-24 Valladares,R. 

и превратить его в это:

SalesOrderNumber CustomName  Status Start  End   CrewName1 CrewName2 CrewName3 
29002    Turner, Linda Closed 2014-01-22 2014-01-24 Espinoza,H Severt,C. Valladares,R. 

спасибо вам заблаговременно!

+0

Что критерии, какие строки получить сгруппированные вместе? Есть ли ограничение на количество строк, которые будут сгруппированы? Что вы сделали до сих пор? –

+0

Что вы пробовали? Какой SQL вы используете? (MSSQL, MySQL, PostgreSQL ...)? –

+0

Группировка @ScottHunter будет выполняться на «SalesOrderNumber», и кепка будет не более 6 –

ответ

-1

Я не понимаю 100% опорных точек, но я думаю, что это должно сработать. Он основан на стержне, которое мы используем здесь. Если он не работает, я мог бы переключить CrewName и SalesOrderNumber в Pivot.

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

SELECT 
    SalesOrderNumber 
    --,CustomName 
    --,Status 
    --,Start 
    --,End 
    ,[1] 
    ,[2] 
    ,[3] 

    FROM (SELECT 
      SalesOrderNumber 
      ,CrewName 

      FROM <TableName> 

      ) As QueryToPivot 


    PIVOT (MAX(QueryToPivot.CrewName) FOR QueryToPivot.SalesOrderNumber IN ([1],[2],[3])) As QueryToPivot 
0

Вы можете использовать PIVOT, чтобы получить результат, но вы также хотите использовать оконную функцию как row_number() создать уникальное значение для каждой строки в SalesOrderNumber. Этот уникальный номер будет использоваться для создания новых столбцов:

select salesordernumber, customname, status, start, [end], 
    Crew1 = [1], 
    Crew2 = [2], 
    Crew3 = [3] 
from 
(
    select salesordernumber, customname, status, start, [end], crewname, 
    row_number() over(partition by salesordernumber 
         order by crewname) seq 
    from yourtable 
) d 
pivot 
(
    max(crewname) 
    for seq in ([1], [2], [3]) 
) piv; 

См SQL Fiddle with Demo

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