SQL题:统计问题(ORACLE)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL题:统计问题(ORACLE)相关的知识,希望对你有一定的参考价值。

表字段描述:
name 名字
time 日期
out 支出
表单如下:
name time out
people_A 15-JUL-02 500
people_B 15-JUL-02 700
people_C 17-JUL-02 200
people_D 17-JUL-02 100
要求将上表转换成下表:
*********15-JUL-02****16-JUL-02****17-JUL-02
people_A***500***********0***********100****
people_B***700***********0***********0******
people_C***0*************0***********0******
请问有没有效率比较高的SQL语句?敬请各位高手发挥。

给你举个行列转换的例子,你把具体的字段名改改就行

假设有张学生成绩表(CJ)如下
[姓名] [学科] [成绩]
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
王五 数学 60

想变成
[姓名] [语文] [数学] [物理]
张三 80 90 85
李四 85 92 82
王五 null 60 null

declare @sql varchar(4000)

set @sql = 'select 姓名'

select @sql = @sql + ',sum(case 学科 when '''+学科+''' then 成绩 end) as '+学科
from (select distinct 学科 from CJ) as a

set @sql = @sql+' from cj group by 姓名'

exec(@sql)
参考技术A 不可转,你的新表里的列是不断增加的,不符合一般数据库里要求的固定列的要求,所以,没有办法,你想想,你的列会越来越多,这个表结构又不能随意变动

oracle 中SQL语句查询的问题,分类统计汇总为和

表T有三个字段A,B,C, A字段为归属地,B字段为类别,C字段为面积。
比如A为各个省,
B为各个省里面各城市和县的名称,(城市分为县,汇总起来为城市)
C为个城市及县的面积。

查询的结果为:
省名---城市1面积---城市2面积---城市3面积---城市4面积---城市5面积
江苏省-南京市--南通市--无锡市---扬州市--常州市
浙江省--。。。----。。---。。。---。。。。。

SQL语句应该怎么写呢? 求救啊,急~~

我问下,你的oracle能不能调用 wmsys用户的wm_concat方法,如果可以就用下面的sql
khg@ORCL> SELECT a||wm_concat('--'||b||'面积'||c) FROM (
2 SELECT '江苏省' A,'南京市' B,22 C FROM dual UNION ALL
3 SELECT '江苏省','南通市',55 FROM dual UNION ALL
4 SELECT '陕西省','西安市',33 FROM dual)
5 GROUP BY a;

A||WM_CONCAT('--'||B||'面积'||
--------------------------------------------------------------------------------
江苏省--南京市面积22,--南通市面积55
陕西省--西安市面积33

khg@ORCL>
如果不能用了再联系我,那就要用递归查了
参考技术A 这个简单的sql语句实现不了,只能通过存储过程或者函数来实现。追问

谢谢,我自己搞定了。

参考技术B http://zhidao.baidu.com/question/210196877.html?an=0&si=7

参考哈这个呢追问

谢谢,我自己搞定了。

参考技术C 这个要用连接查询的!并且是自连接查询的

以上是关于SQL题:统计问题(ORACLE)的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中SQL语句查询的问题,分类统计汇总为和

ORACLE 统计文件后缀SQL

ORACLE 统计文件后缀SQL

Oracle sql 统计

Oracle自动性能统计

Oracle自动性能统计