Вы можете сначала использовать ROW_NUMBER()
, чтобы получить порядковый номер для numriga
в пределах codice
, а затем использовать PIVOT
или условное агрегирование с этим:
A таблица макетов (пожалуйста, создайте ее самостоятельно в следующий раз)
DECLARE @tbl TABLE(codice INT, numriga INT)
INSERT INTO @tbl VALUES
(201,1)
,(201,2)
,(202,2)
,(203,1)
,(203,3)
,(204,NULL)
,(205,1)
,(205,2)
,(205,4);
CTE необходим для применения порядкового номера к каждой нуриге
WITH cte AS
(
SELECT *
,ROW_NUMBER() OVER(PARTITION BY t.codice ORDER BY t.numriga) AS numrigaIndex
FROM @tbl t
)
SELECT t.codice
,MAX(CASE WHEN t.numrigaIndex=1 THEN numriga END) AS [1]
,MAX(CASE WHEN t.numrigaIndex=2 THEN numriga END) AS [2]
,MAX(CASE WHEN t.numrigaIndex=3 THEN numriga END) AS [3]
,MAX(CASE WHEN t.numrigaIndex=4 THEN numriga END) AS [4]
FROM cte t
GROUP BY t.codice;
Вы можете добавить какстолько строк, сколько вам может понадобиться.
Результат
codice 1 2 3 4
------------------------------------
201 1 2 NULL NULL
202 2 NULL NULL NULL
203 1 3 NULL NULL
204 NULL NULL NULL NULL
205 1 2 4 NULL