我的结果来自以下格式的查询
ID CODE
----------
1 abc
1 xyz
1 def
1 pqr
1 jkl
1 tuv
我希望结果采用以下格式
ID CODE1 CODE2 CODE3 CODE4 CODE5 CODE6
---------------------------------------
1 abc xyz def pqr jkl tuv
我知道这可以使用静态PIVOT
查询来实现,但我面临的问题是CODE
列可能有未知值,我希望我的列名被修复,即{{1 }},CODE1
等等'直到CODE2
。
有人可以帮我解决这个问题吗?
欢迎任何建议。
谢谢。
答案 0 :(得分:5)
这可以是使用ROW_NUMBER()
窗口函数的相当简单的PIVOT。我为CODE
1投了第7 ID
来表示如果你只旋转了6列,它会被忽略,因为你的OVER
不是确定性的(它可以{ {1}}因为它只使用ORDER
),所以它想要的任何方式,可以选择一组不同的6 ID
。
MS SQL Server 2017架构设置:
CODE
查询1 :
CREATE TABLE t1 ( ID int, _CODE varchar(20) ) ;
INSERT INTO t1 (ID, _CODE)
VALUES
(1,'abc')
, (1,'xyz')
, (1,'def')
, (1,'pqr')
, (1,'jkl')
, (1,'tuv')
, (2,'lmn')
, (2,'rgb')
, (1,'ignoredOnly6')
;
<强> Results 强>:
SELECT piv.ID
, piv.[1] AS CODE1
, piv.[2] AS CODE2
, piv.[3] AS CODE3
, piv.[4] AS CODE4
, piv.[5] AS CODE5
, piv.[6] AS CODE6
FROM (
SELECT t1.ID, t1._CODE
, ROW_NUMBER() OVER (PARTITION BY t1.ID ORDER BY t1.ID) AS rn
FROM t1
) s1
PIVOT (
max(s1._CODE)
FOR s1.rn IN ([1],[2],[3],[4],[5],[6])
) piv