Как я могу транспонировать строки в столбец в SQL Server? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть следующий код, я хочу перенести несколько строк в один столбец.

Это пример того, как выглядят мои данные:

DocNum    ItemCode  Item Name
-----------------------------------
40008      100208   Desc of 100208  /*parts*/
40008      100209   Desc of 100208  /*parts*/
40008      200845   Desc of 200845  /* tire*/
40008      320361   Desc of 320361  /* disc*/
40008      400511   Desc of 400511  /* rim*/

Я смотрю результат, как показано ниже

itemcode   rim/disc                  tire/parts    
------------------------------------------------
40008      400511-Desc of 400511     200845-Desc of 200845 
           320361-Desc of 320361     100208-Desc of 100208  
                                     100209-Desc of 100208  

Это код SQL, который я пробовал:

select top 10  
    T0.[DocNum], T0.[OriginNum], T0.[ItemCode], T0.[ProdName],     
    T2.[CardName], T0.[Status], T4.[U_Routing], T0.[PlannedQty], 
    T0.[CmpltQty], T0.[PostDate], T0.[DueDate],T1.[ItemCode], 
    T3.[ItemName], T0.[U_Work_Center], T0.[CreateDate]  
from  
    [SERVERNAME]..[DATABASE].[OWOR] as T0 
inner join 
    [SERVERNAME]..[DATABASE].[WOR1] T1 on T0.[DocEntry] = T1.[DocEntry] 
inner join 
    [SERVERNAME]..[DATABASE].[OCRD] T2 on T0.[CardCode] = T2.[CardCode] 
inner join
    [SERVERNAME]..[DATABASE].[OITM] T3 on T1.[ItemCode] = T3.[ItemCode] 
inner join
    [SERVERNAME]..[DATABASE]. [OITM] T4 on T0.[ItemCode] = T4.[ItemCode]

1 Ответ

0 голосов
/ 07 июня 2019

Как прокомментировал ваш вопрос, вам нужно работать с таблицами PIVOT, пожалуйста, посмотрите следующую ссылку .

. Вот пример использования ваших данных:

CREATE TABLE ITEMS (DocNum INT, ItemCode NVARCHAR(MAX), ItemName NVARCHAR(MAX), ItemDesc NVARCHAR(MAX));

INSERT INTO ITEMS (DocNum, ItemCode, ItemName, ItemDesc)
VALUES (40008, '100208', 'Desc of 100208', 'Parts');

INSERT INTO ITEMS (DocNum, ItemCode, ItemName, ItemDesc)
VALUES (40008, '100209', 'Desc of 100209', 'Parts');

INSERT INTO ITEMS (DocNum, ItemCode, ItemName, ItemDesc)
VALUES (40008, '200845', 'Desc of 200845', 'Tire');

INSERT INTO ITEMS (DocNum, ItemCode, ItemName, ItemDesc)
VALUES (40008, '320361', 'Desc of 320361', 'Disc');

INSERT INTO ITEMS (DocNum, ItemCode, ItemName, ItemDesc)
VALUES (40008, '400511', 'Desc of 400511', 'Rim');

Вот пример сводной таблицы:

SELECT 
  DocNum AS [DocNum], [Parts],[Tire],[Disc],[Rim]
FROM
  (
    SELECT 
      DocNum, ItemName, ItemDesc
    FROM ITEMS
   ) AS SOURCE
PIVOT
(
  MAX(ItemName) FOR ItemDesc IN ([Parts],[Tire], [Disc], [Rim])
)  AS Pivoted; 

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

Здесь вы можете протестировать этот скрипт: http://www.sqlfiddle.com/#!18/45f81/23/0 и увидеть ожидаемые результаты.Удачи!

...