Выравнивание записей родительских и дочерних отношений в 1 строку в SQL (обновлено) - PullRequest
0 голосов
/ 10 апреля 2020

У меня до 3 записей на один и тот же номер заказа (нажмите на ссылку ниже, чтобы увидеть изображение). Мне нужно сгладить это в 1 строку, потому что моя таблица целей имеет денормализованную (сглаженную) схему. Мне нужно сделать это для всех 3 комплектов - firstcolX, secondcolX, thirdcolX, так что это всего лишь 1 ряд Отношение 1: N - это порядок (родительский) для позиций заказа (дочерний)

Пожалуйста, нажмите здесь, чтобы увидеть желаемый результат

Спасибо, очень признателен за любую помощь в этом , FWIW, я использую SSIS для перемещения данных из SQL источника в SQL target. Я пробовал PIVOT, но нам не нужны данные строк в качестве имен столбцов.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Я бы сделал это подобно Venkataram, но выполняю работу в соединении вместо коррелированных подзапросов:

;WITH cte AS
(
SELECT *,RowNumber() over(Partition by myOrderNum ORDER BY MyOrderNum) AS rnk
FROM TableName
)
Select cte1.myOrderNum 
   ,cte1.FirstCol1A 
   ,cte2.FirstCol1A as FirstCol1B
   ,cte3.FirstCol1A as FirstCol1C
...
from cte cte1
    join cte cte2 on cte2.myOrderNum = cte1.myOrderNum and cte2.rnk=2
    join cte cte3 on cte3.myOrderNum = cte1.myOrderNum and cte3.rnk=3
where cte1.rnk=1

РЕДАКТИРОВАТЬ: изменен номер заказа на MyOrderNUm

0 голосов
/ 10 апреля 2020

Вы можете создать RowNumber и затем использовать производную таблицу для достижения этой цели.

;WITH CTE_TableName AS
(
SELECT *,RowNumber() over(Partition by myOrderNum ORDER BY MyOrderNum) AS rnk
FROM TableName
)
SELECT myOrderNum,firstcol1A
,(SELECT firstCol1A FROM CTE_TableName WHERE rnk =2 AND OrderNum = c.OrderNum) AS firstCol1B
,(SELECT firstCol1A FROM CTE_TableName WHERE rnk =3 AND OrderNum = c.OrderNum) AS firstCol1C
,SecondCol2A
,(SELECT SecondCol2A FROM CTE_TableName WHERE rnk =2 AND OrderNum = c.OrderNum) AS ,SecondCol2B
,(SELECT SecondCol2A FROM CTE_TableName WHERE rnk =3 AND OrderNum = c.OrderNum) AS ,SecondCol2C
,thirdCol3A
,(SELECT thirdCol3A FROM CTE_TableName WHERE rnk =2 AND OrderNum = c.OrderNum) AS thirdCol3B
,(SELECT thirdCol3A FROM CTE_TableName WHERE rnk =3 AND OrderNum = c.OrderNum) AS thirdCol3C
FROM CTE_TableName AS c;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...