2016-08-04 5 views
-7

У меня есть таблица, как показано ниже:
enter image description hereнескольких строк в строке SQL

Я хочу запроса печатать как ниже вывод: enter image description here

+4

Добро пожаловать на SO. Что вы пробовали? Где вы застряли? Пожалуйста, обратитесь к этому вопросу: [ask] –

+0

Является ли тот же Pod_ID для этих трех рядов? Каков ожидаемый результат, если четкие строки с одинаковым id неожиданно появятся? – jarlh

+0

Да, тот же Pod_ID для этих трех рядов. Я хочу, чтобы запрос был динамическим, если четные строки будут показывать Pur_Qty3, Pur_Price3, ETD_Date3. –

ответ

3

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

Я предлагаю прочитать эти статьи:

PIVOT on two or more fields in SQL Server
Pivoting on multiple columns - SQL Server
Pivot two or more columns in SQL Server 2005

1

На первый UNPIVOT затем PIVOT. Если количество строк для каждого Pod_ID не всегда равно 3, вам нужно использовать динамический SQL. Основной пример:

SELECT * 
FROM (
    SELECT Pod_ID, 
      Purs + CASE WHEN RN-1 = 0 THEN '' ELSE CAST(RN-1 as nvarchar(10)) END as Purs, 
      [Values] 
    FROM (
     SELECT Pod_ID, 
       Pur_Qty, --All columns that will be UNPIVOTed must be same datatype 
       Pur_Price, 
       CAST(ETD_Date as int) ETD_Date, -- that is why I cast date to int 
       ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as RN 
     FROM YourTable 
     ) as p1 
    UNPIVOT (
     [Values] FOR [Purs] IN(Pur_Qty, Pur_Price, ETD_Date) 
    ) as unpvt 
    ) as p2 
PIVOT (
    MAX([Values]) FOR Purs IN (Pur_Qty,Pur_Price,ETD_Date,Pur_Qty1,Pur_Price1,ETD_Date1,Pur_Qty2,Pur_Price2,ETD_Date2) 
) as pvt 

Принесет вам:

Pod_ID         Pur_Qty Pur_Price ETD_Date Pur_Qty1 Pur_Price1 ETD_Date1 Pur_Qty2 Pur_Price2 ETD_Date2 
F8E2F614-75BC-4E46-B7F8-18C7FC4E5397 24  22   20160820 400   33   20160905 50   44   20160830 
Смежные вопросы