100分求一个数据库查询语句(ORACLE 11g)

一张表tabl1 如下:

epqname             createtime                             endtime

设备1             2014.10.01 11:00:00            2014.10.01 13:22:00

设备2             2014.10.27 11:00:00            2014.10.27 14:10:00

设备3             2014.11.11 14:00:00            2014.11.11 15:00:00

设备4             2014.11.29 11:00:00            2014.11.29 16:00:00

我想查询出来结果,显示出,每个设备每天运转的小时数,不足1小时的,算1小时(1小时25分,1小时10分钟  都算2小时)

将日期作为列名,显示当天运转的时间。

epqname      2014.10.01       2014.10.27       2014.11.11       2014.11.29

设备1                     3                          0                        0                            0

设备2                     0                          4                        0                            0

设备3                     0                          0                        1                            0

设备4                     0                          0                        0                            5

------解决思路----------------------

本帖最后由 bw555 于 2014-11-27 11:12:47 编辑

先给你写一个不跨天的情况

with T AS (

SELECT epqname,TRUNC(createtime) D,CEIL((ENDTIME-createtime) *24) AS S

FROM tabl1)

SELECT epqname,

SUM(DECODE(D,TO_DATE('2014.10.01','YYYY.MM.DD'),S)) AS "2014.10.01",

SUM(DECODE(D,TO_DATE('2014.10.27','YYYY.MM.DD'),S)) AS "2014.10.27",

SUM(DECODE(D,TO_DATE('2014.11.11','YYYY.MM.DD'),S)) AS "2014.11.11",

SUM(DECODE(D,TO_DATE('2014.11.29','YYYY.MM.DD'),S)) AS "2014.11.29"

FROM T

GROUP BY epqname

------解决思路----------------------

如果你的createtime和endtime是date类型的话(如果不是要用to_date转化一下数据类型),借鉴下面代码。

select epqname,

sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.10.01'

then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.10.01",

sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.10.27'

then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.10.27",

sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.11.11'

then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.11.11",

sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.11.29'

then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.11.29"

from tabl1 t

group by epqname

order by epqname;

------解决思路----------------------

一、不确定列直接查询是没办法实现的提供两个方案

1、动态拼接sql语句,然后生成视图,然后select * from 视图

2、动态拼接sql语句,利用游标,将结果循环打印输出

二、存在跨天的情况,需要进行拆分

用下面的语句的查询结果代替原表,未测试,你先执行下看看效果吧

select epqname,

greatest(trunc(createtime)+level-1,createtime) createtime,

least(trunc(createtime)+level,endtime) endtime

from tabl1

connect by trunc(createtime)+level-1<=trunc(endtime)

and rowid=prior rowid

and prior dbms_random.value is not null

------解决思路----------------------

动态行转不定列的方法,在9#已经说明,采用视图实现的方式可以参考下面链接,大同小异

参考3#固定列数的sql写法,拼接sql语句,然后动态创建视图,然后select * from 视图

oracle行转列(动态行转不定列)

目前的oracle版本里没有任何可以直接的行转动态列方法,只能借助视图、游标之类的工具间接实现

如果从xml中select 可以借助pivot any的写法实现

oracle查询100到200数据,100分数据库查询语句(ORACLE 11g)相关推荐

  1. 查询客户时,提示“查询已超出200行,请限制查询“

    查询客户时,提示"查询已超出200行,请限制查询" 在EBS中,我们查询客户时如果输入的参数较少,系统会提示"查询已超出200行,请限制查询".如下图: 更新配 ...

  2. mysql 查找数据过程_mysql数据库查询过程探究和优化建议

    查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...

  3. mysql 导入数据库sql语句_mysql中导入数据与导出数据库sql语句

    本文章来详细介绍关于mysql中导入数据与导出数据库sql语句,在mysql中常用的导入与导出数据的命令有source与mysqldump大家可参考. 1.例1:连接到本机上的MYSQL 首先在打开D ...

  4. mysql500万数据查询速度_是什么影响了数据库查询速度

    一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查 ...

  5. 分享3个CPU跑分数据库查询,AMD Inter cpu各项分数查询

    https://www.cpu-monkey.com/en/ https://us.rebusfarm.net/en/tempbench?view=benchmark https://www.cgdi ...

  6. oracle数据库查询表语句,oracle数据库重要的查询语句

    查看所有数据文件(dbf文件)的存放位置 SQL> select name from v$datafile; 标红色的为默认表空间文件 SQL> select name from v$da ...

  7. oracle 数据导入 mysql_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...

    这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧 方法一:利用PL/SQL Developer工具导 ...

  8. 类型的值怎么用es查询_腾讯游戏信用分怎么查询在哪看 有什么用怎么提升介绍...

    腾讯游戏信用分查询方法是很多小伙伴们都不知道的,在腾讯游戏中腾讯信用分是极其重要的,那么各位小伙伴们知道腾讯信用分怎么查吗?相信还有很多小伙伴不太清楚,那么接下来和大家一起分享一下腾讯游戏信用分查询方 ...

  9. mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...

    之前开发的一个监控系统,数据库的日志表是单表,虽然现在数据还不大并且做了查询sql优化,不过以后数据库的日志表数据肯定会越来越庞大,将会导致查询缓慢,所以把日志表改成分表,日志表可以按时间做水平分表, ...

最新文章

  1. 今天决定写一篇LNMP的深入调优,
  2. 2013年新疆中小学教师计算机水平考试机试题(复习版),2013年新疆中小学教师计算机水平考试笔试题(复习版8套含答案)...
  3. python numpy库安装winerror5_(转载)Numpy安装中遇到的问题和解决方法
  4. {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习
  5. Java throw:异常的抛出
  6. 解题报告 『活动安排(贪心)』
  7. 四位数码管树莓派c语言,用树莓派和四位数码管模块做一个时钟
  8. 前端基础进阶(七):函数与函数式编程
  9. 万字长文,SpringSecurity
  10. SYBASE数据导入技巧
  11. RxHttp 一条链发送请求之注解处理器 Generated API(四)
  12. Java swing实现简单的浏览器源码免费分享
  13. 一步一步写算法(之排序二叉树删除-2)
  14. 数据结构笔记(二)--- 顺序实现线性表
  15. 【UVA12230】Crossing Rivers(概率/期望)
  16. Silvaco TCAD仿真基础2
  17. Pinterest Copy to China——meterial collect
  18. Excel常用工具---在线版V1.5使用说明
  19. 爬虫——bs4测试——test.html
  20. ubuntu系统服务器网速测试方法

热门文章

  1. Myeclipse连接Mysql数据库时报错:Error while performing database login with the pro driver:unable...
  2. 第八模块:算法设计模式、企业应用 第2章 企业应用工具学习
  3. LaTeX 安装配置 OSX
  4. overfitting(过度拟合)的概念
  5. javascript --- 使用语法糖class定义函数
  6. 电脑下载的M4A格式文件怎么转换为MP3格式
  7. django 利用PIL 保存图片
  8. 【VMware vSAN 6.6】6.2.启用性能服务:vSAN硬件服务器解决方案
  9. AlienVault Ossim各版本镜像下载地址
  10. _M_invoke(_Index_tuple_Indices...)