答案 0 :(得分:3)
您可以首先使用ROW_NUMBER()
来获取numriga
中每个codice
的运行编号,然后使用PIVOT
或条件聚合 :
样机表(请下次自行创建)
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