oracle 11g 行转列后的列名怎么在外层SQL中使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 11g 行转列后的列名怎么在外层SQL中使用相关的知识,希望对你有一定的参考价值。

例如:
select * from(select name,sum(num) from v_emplee) pivot (sum(num) for name in('PM','DOWN'))
结果:
PM DOWN
0.01 0.02

我想在此SQL上在写个SQL查询,如下:
select (1-'PM') from
(
select * from(select name,sum(num) from v_emplee) pivot (sum(num) for name in('PM','DOWN'))
) T

问题是 那个 1-'PM' 不行,'PM' 取不到列值,求大神!!

pm现在应该相当于一个列名,也就是说着应该和原来的name是一个意思。那么1-pm应该就可以,试试

select 1-PM,down from
(
select * from(select name,sum(num) from v_emplee) pivot (sum(num) for name in('PM','DOWN'))
) T追问

不行,我试过了!

参考技术A number-VARCHAR?
pm和dpwn都是值吧,追问

运算不重要,问题是怎么列举一个个列出来,select *可以,select 列名 就不行

追答

你可以给表加一个别名,使用别名来选择字段

参考技术B for name in('PM'as pm,'DOWN'as down)) 不要写1-pm本回答被提问者采纳 参考技术C 不知道 参考技术D 美国苹果股份有限公司设计生产的手机叫iphone, 苹果公司的所有产品人们都喜欢叫他苹果,如苹果电脑,苹果手机、苹果mp4、。但是苹果公司的每一款产品都是有独立的名字的,如 手机叫iphone ,笔记本叫 macbook,音乐播放器叫ipod ,平板电脑叫ipad。

PIVOT:行转列函数

PIVOT函数,行转列

PIVOT函数的格式如下:

PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N]))
<聚合函数>就是我们使用的SUM,COUNT,AVG等Sql聚合函数,也就是行转列后计算列的聚合方式。
[聚合列值]要进行聚合的列名
[行转列前的列名]这个就是需要将行转换为列的列名。
[行转列后的列名]这里需要声明将行的值转换为列后的列名,因为转换后的列名其实就是转换前行的值,所以上面格式中的[行转列后的列名1],[行转列后的列名2],[行转列后的列名3],......[行转列后的列名N]其实就是[行转列前的列名]每一行的值。

SELECT FROM [StudentScores] /数据源/
AS P
PIVOT
(
SUM(Score/
分数----行转列后 列的值/) FOR
p.Subject/
课程-----需要行转列的列/ IN ([语文],[数学],[英语],[生物]/列的值*/)
) AS T

SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行 - PowerCoder - 博客园 http://www.cnblogs.com/OpenCoder/p/6668882.html

以上是关于oracle 11g 行转列后的列名怎么在外层SQL中使用的主要内容,如果未能解决你的问题,请参考以下文章

SqlServer基本操作

oracle行转列实践

oracle 列名不确定 行转列

SQL使用CASE WHEN 行转列为啥会出现NULL值?

sql server 如何改变计算结果的值 如null改变为0

MySQL行转列与列转行