需要通过 SQL 转置列

Posted

技术标签:

【中文标题】需要通过 SQL 转置列【英文标题】:Need to Transpose Columns via SQL 【发布时间】:2015-05-13 16:06:23 【问题描述】:

我整个早上都在谷歌上搜索,试图弄清楚如何通过 SQL 转置我的数据,但我就是不明白。我有一个需要转置列的数据表。

我原来的表格是这样的:

(列名在顶行)

我想转置列,所以我的结果如下:

有人可以帮助我使用正确的代码来获得我需要的结果吗?我不能只通过 Excel 进行转置,因为数据是动态的。

编辑: 我试过这段代码:

SELECT [Gift Level], Goal
FROM
(   SELECT * FROM GiftPyramidDollars)
AS Result
Unpivot
(Goal for [Gift Level] in ([< $25,000], [$25,000], [$50,000], [$100,000], [$200,000], [$250,000], [$500,000], [$1,000,000], [$2,500,000], [$5,000,000], [$10,000,000])
)
AS UnPvt

但它没有将结果分成两列。这是我得到的:

Gift Level      Goal
< $25,000   0.00
$25,000         0.00
$50,000         0.00
$100,000    8000000.00
$200,000    10000000.00
$250,000    6250000.00
$500,000    12500000.00
$1,000,000  30000000.00
$2,500,000  12500000.00
$5,000,000  10000000.00
$10,000,000 10000000.00
< $25,000   58126.67
$25,000         260687.75
$50,000         394300.00
$100,000    352233.61
$200,000    800000.00
$250,000    2110000.00
$500,000    4603423.93
$1,000,000  11500000.00
$2,500,000  0.00
$5,000,000  5000000.00
$10,000,000 0.00

【问题讨论】:

你想取消透视。 您能说得更具体些吗?我今天早上也读过关于 UNPIVOT 的文章,并尝试过,但无法弄清楚代码。 我已经发布了blog entry on pivot。它有一些可能与您的情况相匹配的简单示例。语法可能特定于 oracle SQL。请注意,其他海报是正确的:您打算做一个unpivot 请问您能否将您的 SQL 数据表的列名添加到问题中? 列名在数据的第一行。或者,它们是 Campaign、' 【参考方案1】:
SELECT B.[Gift Level]
     , [$ Goal] = MAX(CASE B.Campaign WHEN '$ Goal' THEN B.Goal END)
     , [$ Raised to Date] = MAX(CASE B.Campaign WHEN '$ Raised to Date' THEN B.Goal END)
FROM GiftPyramidDollars A
UNPIVOT(A.Goal FOR [Gift Level] IN (
    [< $25,000]
  , [$25,000]
  , [$50,000]
  , [$100,000]
  , [$200,000]
  , [$250,000]
  , [$500,000]
  , [$1,000,000]
  , [$2,500,000]
  , [$5,000,000]
  , [$10,000,000])
) B
GROUP BY B.[Gift Level]

【讨论】:

以上是关于需要通过 SQL 转置列的主要内容,如果未能解决你的问题,请参考以下文章

将具有唯一值的列转置到行的 SQL 查询

转置列或反透视 SQL 查询

oracle sql 11G中如何将列转置为行

将列转置为行 SQL Server

t-sql 将列转置为行

从现有列转置 Hive SQL 数据