首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql server中的枢轴:垂直到水平数据

sql server中的枢轴:垂直到水平数据
EN

Stack Overflow用户
提问于 2016-12-07 20:34:36
回答 2查看 3.5K关注 0票数 0

嗨,我有下表,我想使用枢轴函数:

代码语言:javascript
复制
Id|Number| Code
1 |  34  |abc12345
1 |  23  |xqwe6758
2 |  37  |ghut564hg
3 | 456  |ghut8695
3 |  39  |ghtuj678
3 |  22  |fsdifje12

我希望它水平地显示如下:

代码语言:javascript
复制
Id| Code1    | Code2    | Code3
1 | abc12345 | xqwe6758 | null  
2 |ghut564hg | null     | null
3 |ghut8695  | ghtuj678 | fsdifje12


SELECT Id
      ,[Code1]
      ,[Code2]
      ,[Code3]
  FROM(SELECT Id,Code
        FROM [TableName] 
  )d
  pivot(
  max(Id)
  for Code in([Code1],[Code2],[Code3])
  )as piv;

这会在Id列上引发无效的列名错误。有人能帮忙识别错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-07 20:52:28

可以使用枢轴,如下所示:

代码语言:javascript
复制
;with cte as 
(
    select  
        id, code, 
        RowN = Row_Number() over (partition by id order by code) 
    from 
        yourtable1
) 
select * 
from cte
pivot ( max(code) for RowN in([1], [2], [3])) p

对于不同的列,您可以使用SQL创建列列表,然后使用动态SQL以不同的列运行.但它本身在各种例子中都是可用的。

添加了我的输出:

票数 2
EN

Stack Overflow用户

发布于 2016-12-07 20:56:11

尝尝这个

代码语言:javascript
复制
DECLARE @tbl TABLE(Id INT, Code VARCHAR(100));
INSERT INTO @tbl VALUES
 (1,'abc12345')
,(1,'xqwe6758')
,(2,'ghut564hg')
,(3,'ghut8695')
,(3,'ghtuj678')
,(3,'fsdifje12');

SELECT p.*
FROM
(
    SELECT Id
           ,'Code' + CAST(ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Code) AS VARCHAR(10)) AS ColumnName
           ,Code
    FROM @tbl
) AS t
PIVOT
(
    MAX(Code) FOR ColumnName IN(Code1,Code2,Code3 /*add as many as you need*/)
) AS p

结果

代码语言:javascript
复制
Id  Code1       Code2       Code3
1   abc12345    xqwe6758    NULL
2   ghut564hg   NULL        NULL
3   fsdifje12   ghtuj678    ghut8695
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41026882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档