透视取消透视附加列

Posted

技术标签:

【中文标题】透视取消透视附加列【英文标题】:Pivot Unpivot Additional Column 【发布时间】:2013-08-24 21:31:23 【问题描述】:

如果我有一些表格,例如:

   [Speed] [Ram] [Whatever] [Other]
      S1    R1     W1        O1
      S2    R2     W2        O2
      S3    R3     W3        O3

而我想要拥有这样的一切。

[Chr]     [Value]
Speed      S3
Ram        R3
Whatever   W3
Other      O3

所以我写了以下代码:

SELECT value
FROM
   (SELECT speed, ram
   FROM pc where code=3) p
UNPIVOT
   (value FOR xxx IN
      (speed, ram)
)AS unpvt

问题是当我想添加我的第二列 [chr]

    SELECT value, chr <---- This does not work 
        FROM
           (SELECT speed, ram, whatever, other
           FROM pc where code=3) p
        UNPIVOT
           (value FOR xxx IN
              (speed, ram)
        )AS unpvt
UNPIVOT
           (chr FOR zzz IN
              (speed, ram, whatever, other)
        )AS unpvt

我不知道如何在此代码中添加另一列。请任何建议。

【问题讨论】:

不清楚你在问什么。为什么需要两个UNPIVOT?您的示例数据中的 code 列在哪里? 假设数据库中有代码列。我不需要 2 unpivot 。我只是不知道如何在这种情况下添加 chr 列。 You need this? 如果列“whatever”的类型与 UNPIVOT 列表中指定的其他列的类型冲突怎么办。 【参考方案1】:

你在找这个吗?

SELECT Chr, Value
  FROM
(
  SELECT t.*
    FROM pc t
   WHERE code = 3
) s
UNPIVOT
(
  Value FOR Chr IN (Speed, Ram, Whatever, Other)
) p

输出:

|人力资源 |价值 | -------------------- |速度 | S3 | |拉姆 | R3 | |随便| W3 | |其他 |氧气 |

这里是SQLFiddle演示

【讨论】:

以上是关于透视取消透视附加列的主要内容,如果未能解决你的问题,请参考以下文章

具有附加列的数据透视表

如何获得解码/未透视行的唯一计数(列到行)

将数据透视结果附加(插入)到现有 SQL 表中

在数据透视表中附加数据时时间戳不更新

如何获取附加数据透视表的数据?

在数据透视表 laravel 中添加与附加值的关系