SQL转换数据

SQL转换数据,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有以下格式的查询结果 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查询来实现,但我面临的问题是代码列可

我有以下格式的查询结果

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查询来实现,但我面临的问题是代码列可能有未知值,我希望我的列名是固定的,即CODE1、CODE2等等,直到CODE6

有人能帮我解决这个问题吗

欢迎提出任何建议


谢谢。

这可以是一个使用行数窗口功能的相当简单的轴心。我为ID 1添加了第7个代码,以表明如果您只旋转6列,它将被忽略,但是,因为您的OVER不是确定性的,它可以按任何方式排序,因为它只使用ID,它可以选择不同的6个代码集

MS SQL Server 2017架构设置:

问题1:

:


这可以是一个使用行数窗口函数的相当简单的轴心。我为ID 1添加了第7个代码,以表明如果您只旋转6列,它将被忽略,但是,因为您的OVER不是确定性的,它可以按任何方式排序,因为它只使用ID,它可以选择不同的6个代码集

MS SQL Server 2017架构设置:

问题1:

:


请发布您的查询我个人认为Pivot的语法非常迟钝。对于这类事情,我更喜欢使用动态交叉表。这里有一个例子@SeanLange摩登永远不会出错。而且它的性能可能比它看起来应该的要好得多。删除tallyTable代码后,它就不像看上去那么复杂了。我得记住那个。谢谢。请发布您的查询我个人认为Pivot的语法非常迟钝。对于这类事情,我更喜欢使用动态交叉表。这里有一个例子@SeanLange摩登永远不会出错。而且它的性能可能比它看起来应该的要好得多。删除tallyTable代码后,它就不像看上去那么复杂了。我得记住那个。谢谢。注意:我还使用了表别名,这样您可以看到值来自查询中的位置。我同意肖恩的观点,枢轴可能会有点不稳定。非常感谢你的回答。非常感谢。我的over实际上有3列,所以这个查询会有任何变化吗?你是什么意思?在s1子查询中可以有多个不以数据为轴的列。这将更改窗口的分区方式。是的,我的子查询中总共有4列,其中的代码是以数据透视的。注意:我还使用了表别名,以便您可以查看值在查询中的来源。我同意肖恩的观点,枢轴可能会有点不稳定。非常感谢你的回答。非常感谢。我的over实际上有3列,所以这个查询会有任何变化吗?你是什么意思?在s1子查询中可以有多个不以数据为轴的列。这将改变窗口的分区方式。是的,我的子查询中总共有4列,其中的代码是以数据透视的。
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')
;
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
| ID | CODE1 | CODE2 |  CODE3 |  CODE4 |  CODE5 |  CODE6 |
|----|-------|-------|--------|--------|--------|--------|
|  1 |   abc |   xyz |    def |    pqr |    jkl |    tuv |
|  2 |   lmn |   rgb | (null) | (null) | (null) | (null) |