实现行列间转换需求
来源:互联网 发布:五毛钱特效视频软件 编辑:程序博客网 时间:2024/06/03 16:50
在数据库报表查询时事实表中的数据很多情况下没有直接反映最终报表需求的格式,其中很典型的就是要把多行的数据转换成列的形式显示,举例如下:
事实表T_Score(学生成绩表):
CREATE TABLE "DB2ADMIN"."T_SCORE" (
"NAME" VARCHAR(20) ,
"SUBJECT" VARCHAR(20) ,
"SCORE" INTEGER ) ;
示例数据:
Mary Chinese 90
Mary English 84
Mary Maths 79
Tom Chinese 86
Tom English 93
Tom Maths 89
但是报表需求:
NAME Chinese English Maths
Mary 90 84 79
Tom 86 93 89
SQL实现:
select name,
sum(decode(subject,'Chinese',score)) as Chinese,
sum(decode(subject,'English',score)) as English,
sum(decode(subject,'Maths',score)) as Maths
from t_score group by name;
另外还有一种需求是希望把多行的数据合并到一列中,可以利用oracle的树结构查询获得(connect by 语句):
select sys_connect_by_path(r_name,'|'),level LV from
(select r_name,row_number() over (order by id_stock desc) rn
from t_stocks_fact) where level>3 connect by rn=prior rn+1;
至于列转为行则可以用union all来实现,以T_Score_Row为例,
select name, 'Chinese' as subject, chinese from T_Score_Row
union all
select name, 'English' as subject, english from T_Score_Row
union all
select name, 'Maths' as subject, maths from T_Score_Row
以下SQL是上面行转列过程的逆操作而已。
select * from (
select name, 'Chinese' as subject, chinese from (
select name,
sum(decode(subject,'Chinese',score)) as Chinese,
sum(decode(subject,'English',score)) as English,
sum(decode(subject,'Maths',score)) as Maths
from t_score group by name)
union all
select name, 'English' as subject, english from (
select name,
sum(decode(subject,'Chinese',score)) as Chinese,
sum(decode(subject,'English',score)) as English,
sum(decode(subject,'Maths',score)) as Maths
from t_score group by name
)
union all
select name, 'Maths' as subject, maths from (
select name,
sum(decode(subject,'Chinese',score)) as Chinese,
sum(decode(subject,'English',score)) as English,
sum(decode(subject,'Maths',score)) as Maths
from t_score group by name
)
) order by name
- 实现行列间转换需求
- oracle 实现行列转换
- SQL 实现行列转换
- oracle实现行列转换
- SQL实现行列转换
- Sql实现行列转换
- sqlite实现行列转换
- sql实现行列转换
- 静态语句实现行列转换
- 二维数组实现行列转换
- oracle sys_connect_by_path实现行列转换
- sql pivot 实现行列转换
- SQL 实现行列转换示例
- PL/SQL 实现行列转换
- Oracle中实现行列转换的方法
- 在C#中实现行列转换
- 应用SQL交叉表实现行列转换
- WORD及EXCEL行列转换实现方法
- Oracle数据文件的特性
- svn的安装与配置
- ECMAScript
- Android 调试桥官方文档翻译(adb)
- 滤波器的时域理解
- 实现行列间转换需求
- 无需.NET Framework环境运行.NET编写的软件
- RMI的简易使用方法
- TipSearch引擎测试心得
- Groovy -java的好伙伴4
- 网站运营推广征文大赛进行中 万元大奖花落谁家
- NetBeans6.8 JSP中文显示问题
- ghost后分区不见了!
- MMC不能打开文件 SQL Server Enterprise Manager.MSC 错误的处理