【问题标题】:Make column values into headers将列值放入标题中
【发布时间】:2014-10-07 05:58:18
【问题描述】:

请帮我解决这个问题,因为我还是个使用 SQL Server 的新手。我有下表

  Order  |  SCHGP  |      Item       |
+--------+---------+-----------------+
| 220132 | Class 1 | 0121R00007PDG   |
| 220132 | Class 2 | 0201R00046      |
| 220132 | Class 3 | 4400464PLGB     |
| 220132 | Class 4 | 4400466PLGB     |
|        | Class 5 | 4400468PLG      |
| 220132 | Class 6 | 0121R00013PDG   |
| 220167 | Class 1 | 0121R00006PNG   |
| 220167 | Class 2 | 0201R00338      |
| 220167 | Class 3 | 0121R00344PNG   |
| 220167 | Class 4 | 0121R00352PNG   |
| 220167 | Class 5 | 0121R00010PNG   |
+--------+---------+-----------------+

并希望获得以下信息(基本上按订单分组并将 SCHGP 列放入标题中):

║  Order ║    Class 1    ║  Class 2   ║    Class 3    ║    Class 4    ║    Class 5    ║    Class 6    ║
╠════════╬═══════════════╬════════════╬═══════════════╬═══════════════╬═══════════════╬═══════════════╣
║ 220132 ║ 0121R00007PDG ║ 0201R00046 ║ 4400464PLGB   ║ 4400466PLGB   ║ 4400468PLG    ║ 0121R00013PDG ║
║ 220167 ║ 0121R00006PNG ║ 0201R00338 ║ 0121R00344PNG ║ 0121R00352PNG ║ 0121R00010PNG ║               ║
╚════════╩═══════════════╩════════════╩═══════════════╩═══════════════╩═══════════════╩══════════════

任何提示将不胜感激!

【问题讨论】:

标签: sql sql-server-2008 pivot


【解决方案1】:

根据您的示例数据和结果,这是 SQL Server 中的PIVOT。

SQL Fiddle Demo

SELECT * 
FROM   
  (select [order], schgp, STUFF(
      (
        select cast(' ' as varchar(max)) + item
        from testpivot t1
        where t1.[order] = t2.[order] and t1.schgp = t2.schgp
        for xml path('')
      ), 1, 1, '') AS item
from testpivot t2
) a 
PIVOT 
  (Max(item) 
   FOR schgp IN ([Class 1], [Class 2], [Class 3], [Class 4], [Class 5], [Class 6])) AS pvt 

【讨论】:

  • 感谢JChao的帮助!如何在同一列上显示两条记录或创建两条具有相同信息的记录。假设有两个项目属于同一类,例如最理想:订单 220132 SCHGP:2 类,项目:ABC ABD。可接受:订单 220132 SCHGP:2 类,项目:ABC 订单 220132 SCHGP:2 类,项目:ABD
  • 您必须使用 xml 进行子选择
  • 约翰能举个例子吗?
  • @user3703758 我已经更新了答案。约翰的建议是模拟组连接。所以我在基础数据集中做了这个,然后旋转数据。我已经用示例数据更新了 SQL fiddle 示例,其中订单有多个 1 类。
  • 非常感谢JChao,你能解释一下xml路径的作用吗?
猜你喜欢
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
相关资源
最近更新 更多