需要通过 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 转置列的主要内容,如果未能解决你的问题,请参考以下文章