如何在不聚合列的情况下透视 SQL 数据
我在查询中有以下输出。
SKILL LEVEL SCORERANGE
-----------------------------------------------------------------------------
Stunts LOW 0.0 - 4.0
Stunts MED 3.0 - 7.0
Stunts HI 6.0 - 10.0
Pyramids LOW 0.0 - 4.0
Pyramids MED 3.0 - 7.0
Pyramids HI 6.0 - 10.0
Tosses LOW 0.0 - 4.0
Tosses MED 3.0 - 7.0
Tosses HI 6.0 - 10.0
Standing Tumbling LOW 0.0 - 4.0
Standing Tumbling MED 3.0 - 7.0
Standing Tumbling HI 6.0 - 10.0
Running Tumbling LOW 0.0 - 4.0
Running Tumbling MED 3.0 - 7.0
Running Tumbling HI 6.0 - 10.0
Jumps LOW 0.0 - 4.0
Jumps MED 3.0 - 7.0
我想在不聚合任何内容的情况下对这些数据进行透视。所以我想要一个结果,该结果只显示每项技能的一行并旋转级别,就像这样...
SKILL LOWRANGE MEDRANGE HIRANGE
Stunts 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Pyramids 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Tosses 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Standing Tumbling 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Running Tumbling 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
...
我确实对基本的透视语法有很好的理解,但我正在努力解决这个问题,因为没有什么可以聚合的结果集。
给你一些东西来帮我解决...
SELECT SKILL, LOWRANGE, MEDRANGE, HIRANGE
FROM (SELECT SKILL, [LEVEL], SCORERANGE FROM ScoreRanges) ps
PIVOT
(
MAX(SCORERANGE) --THIS IS PROBABLY WRONG
FOR SCORERANGE IN
(
--SOMETHING GOES HERE
)
) as pvt
感谢你的帮助。
赛斯
I have the following output in a query.
SKILL LEVEL SCORERANGE
-----------------------------------------------------------------------------
Stunts LOW 0.0 - 4.0
Stunts MED 3.0 - 7.0
Stunts HI 6.0 - 10.0
Pyramids LOW 0.0 - 4.0
Pyramids MED 3.0 - 7.0
Pyramids HI 6.0 - 10.0
Tosses LOW 0.0 - 4.0
Tosses MED 3.0 - 7.0
Tosses HI 6.0 - 10.0
Standing Tumbling LOW 0.0 - 4.0
Standing Tumbling MED 3.0 - 7.0
Standing Tumbling HI 6.0 - 10.0
Running Tumbling LOW 0.0 - 4.0
Running Tumbling MED 3.0 - 7.0
Running Tumbling HI 6.0 - 10.0
Jumps LOW 0.0 - 4.0
Jumps MED 3.0 - 7.0
I want to PIVOT this data without aggregating anything. So I want a result that shows only one row for each skill and pivots the LEVEL, something like this...
SKILL LOWRANGE MEDRANGE HIRANGE
Stunts 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Pyramids 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Tosses 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Standing Tumbling 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
Running Tumbling 0.0 - 4.0 3.0 - 7.0 6.0 - 10.0
...
I do have a pretty good understanding of basic pivot syntax but I am struggling with this one because there is nothing to aggregate in the result set.
To give you something to try to fix for me...
SELECT SKILL, LOWRANGE, MEDRANGE, HIRANGE
FROM (SELECT SKILL, [LEVEL], SCORERANGE FROM ScoreRanges) ps
PIVOT
(
MAX(SCORERANGE) --THIS IS PROBABLY WRONG
FOR SCORERANGE IN
(
--SOMETHING GOES HERE
)
) as pvt
Thanks for your help.
Seth
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如您所知,每个
SKILL、LEVEL
组合只有 1 行,您可以使用Max
或Min
As you know you will only have 1 row per
SKILL, LEVEL
combination you can useMax
orMin
您几乎猜对了
这是一个可以在 Adventureworks 数据库中运行的示例,因此您也可以使用它来了解
PIVOT
的工作原理我这里还有另一个 PIVOT 示例:在 SQL Server 中使用配置值填充变量的三种不同方法
You almost got it right
Here is an example you can run in the Adventureworks database, so you can play around with that also to see how
PIVOT
worksI also have nother PIVOT example here: Three different ways of populating variables with configuration values in SQL Server