微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL PIVOT表格

如何解决SQL PIVOT表格

| 我有以下数据:
ID       Data
1         tera
1         add
1         alkd
2         adf
2         add
3         wer
4         minus
4         add
4         ten
我正在尝试使用数据透视表将行推入1行,每个ID多列。 因此如下:
ID   Custom1     Custom2    Custom3   Custom4..........
1      tera       add         alkd      
2      adf        add
3      wer
4      minus      add          ten
到目前为止,我有以下查询
  INSERT INTO @SpeciInfo
(ID,[Custom1],[Custom2],[Custom3],[Custom4],[Custom5],[Custom6],[Custom7],[Custom8],[Custom9],[Custom10],[Custom11],[Custom12],[Custom13],[Custom14],[Custom15],[Custom16])
    SELECT 
        ID,[Custom16]
    FROM SpeciInfo) p
    PIVOT
    (
        (
            [Custom1],[Custom16]
        )
    ) AS pvt
    ORDER BY ID;
我需要16个字段,但是我不确定我在From子句中做什么还是什至不能正确执行? 谢谢     

解决方法

        如果您要查找的是动态生成列,则通常将其称为动态交叉表,并且在T-SQL中不能不借助动态SQL(生成查询的字符串)而这样做,这是不推荐的。相反,您应该在中间层或报表应用程序中构建该查询。 如果只需要静态解决方案,则在SQL Server 2005或更高版本中,使用PIVOT的替代方法可能看起来像这样:
With NumberedItems As
    (
    Select Id,Data,Row_Number() Over( Partition By Id Order By Data ) As ColNum
    From SpeciInfo
    )
Select Id,Min( Case When Num = 1 Then Data End ) As Custom1,Min( Case When Num = 2 Then Data End ) As Custom2,Min( Case When Num = 3 Then Data End ) As Custom3,Min( Case When Num = 4 Then Data End ) As Custom4
    ...
From NumberedItems
Group By Id
原始数据中的一个严重问题是没有顺序指示符,因此系统没有办法让系统知道给定ID的哪个项目应出现在Custom1列中而不是Custom2列中。在上面的查询中,我按名称任意排序。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。