Oracle SQL语句练习

最近在做报表,写了一些SQL,整理一下,其中涉及到Oracle很多语法的使用,方便大家参考与复习!

SELECT 
   RESULT.SITE_NAME,RESULT.MONITOR_TIME,RESULT.COD,RESULT.AD,RESULT.ZD,RESULT.RJY,RESULT.EXCEED_COUNT
FROM
(
    SELECT * FROM
     (
            SELECT 
                 R.SITE_ID,
                 B."NAME" AS SITE_NAME,
                 TO_CHAR(R.MONITOR_TIME,'yyyy-MM-dd HH:mm') AS MONITOR_TIME,
                 R.PROJECT_ID,
                 D."NAME" AS PROJECT_NAME,
                 R.MONITOR_RESULT,
                 (SELECT DISTINCT UNIT FROM T_QUALITY_ALARM A WHERE A.PROJECT_ID = R.PROJECT_ID) UNIT,
                 --查询同一个站点同一个指标的最新一条记录
                 ROW_NUMBER() OVER(PARTITION BY R.SITE_ID,R.PROJECT_ID ORDER BY R.MONITOR_TIME DESC) RN,
                 --根据站点和监测时间统计超标次数
                 SUM(CASE WHEN R.IF_EXCEED = 'YES' THEN 1 ELSE 0 END) over (partition by R.SITE_ID || R.MONITOR_TIME) EXCEED_COUNT
            FROM T_QUALITY_REALTIME_RESULT R
            LEFT JOIN T_QUALITY_RIVER_INFO B
            ON B."ID" = R.SITE_ID
            LEFT JOIN PLATFORM_DICTIONARY_DATA D
            ON R.PROJECT_ID = D."VALUE" AND D.CODE = 'RIVER_PROJECT_TYPE'
            WHERE 1=1
           AND B.DATA_SOURCE = 'GPH'
             AND B.IF_SELF_MOTION = 'YES'
             AND R.PROJECT_ID IN ('w01018','w21003','w01003','w01009')
            ORDER BY R.MONITOR_TIME DESC,R.SITE_ID
        ) T 
    WHERE T.RN = 1
  --根据指定的不同指标展示拼接的项目名称、监测结果、单位(竖转横)
) PIVOT ("MAX"(PROJECT_NAME || ':' || MONITOR_RESULT || '  ' || UNIT) FOR PROJECT_ID IN ('w01018' AS COD,'w21003' AS AD,'w01003' AS ZD,'w01009' AS RJY)) RESULT
ORDER BY RESULT.MONITOR_TIME DESC,RESULT.SITE_ID

结果展示:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值