日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2023/12/10 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle查询100到200数据,100分数据库查询语句(ORACLE 11g) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。