Quick and simple
😎
USE tempdb;
GO
/* LETS PRETEND THIS IS THE TABLE */
;WITH BASE_DATA AS
(
SELECT
ItemId
,CustomerItemId
,Customer
,Plant
,UnitPrice
,CustomerPO
FROM (VALUES
(637,'82604029-5','C1','P1','0.7208','P1000')
,(637,'82604029-5','C2','P1','0.6889','441670')
,(637,'82604029-5','C2','P1','0.6889','411754')
,(637,'82604029-5','C2','P1','0.6889','412530')
) AS X(ItemId,CustomerItemId,Customer,Plant,UnitPrice,CustomerPO)
)
/* AND THIS IS OUR CTE */
,RN_DATA AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY ItemId ORDER BY (SELECT NULL)) AS BD_RID
,BD.ItemId
,BD.CustomerItemId
,BD.Customer
,BD.Plant
,BD.UnitPrice
,BD.CustomerPO
FROM BASE_DATA BD
)
SELECT
RD1.ItemId
,RD1.CustomerItemId
,RD1.Customer
,RD1.Plant
,RD1.UnitPrice
,RD1.CustomerPO
,RD2.CustomerItemId
,RD2.Customer
,RD2.Plant
,RD2.UnitPrice
,RD2.CustomerPO
,RD3.CustomerItemId
,RD3.Customer
,RD3.Plant
,RD3.UnitPrice
,RD3.CustomerPO
,RD4.CustomerItemId
,RD4.Customer
,RD4.Plant
,RD4.UnitPrice
,RD4.CustomerPO
FROM RN_DATA RD1
OUTER APPLY RN_DATA RD2
OUTER APPLY RN_DATA RD3
OUTER APPLY RN_DATA RD4
WHERE RD1.ItemId = RD2.ItemId
AND RD2.ItemId = RD3.ItemId
AND RD3.ItemId = RD4.ItemId
AND RD1.BD_RID = RD2.BD_RID - 1
AND RD2.BD_RID = RD3.BD_RID - 1
AND RD3.BD_RID = RD4.BD_RID - 1
Results
ItemId CustomerItemId Customer Plant UnitPrice CustomerPO CustomerItemId Customer Plant UnitPrice CustomerPO CustomerItemId Customer Plant UnitPrice CustomerPO CustomerItemId Customer Plant UnitPrice CustomerPO
----------- -------------- -------- ----- --------- ---------- -------------- -------- ----- --------- ---------- -------------- -------- ----- --------- ---------- -------------- -------- ----- --------- ----------
637 82604029-5 C1 P1 0.7208 P1000 82604029-5 C2 P1 0.6889 441670 82604029-5 C2 P1 0.6889 411754 82604029-5 C2 P1 0.6889 412530