oracle数据库方法

1、显示指定条数,多余条数汇总

复制代码
--通过下列语句生成行号PARTITION BY 分段字段
row_number ( ) over ( PARTITION BY ID ORDER BY money DESC ) line,
--通过行号大小进行合并查询 UNION ALL 合并两条查询结果
SELECT * FROM(
        SELECT pageSize AS line,id,org_name,'' AS SECTION_ID,'其他' AS SEOF_NAME,SUM(    money) AS money FROM tab
        WHERE line >= pageSize
        GROUP BY id,org_name
        UNION ALL
        SELECT line,id,org_name,SECTION_ID,SEOF_NAME,money FROM tab
        WHERE line < pageSize
        )
        ORDER BY id,line
复制代码

2、nvl()函数巧避空值求和

SUM(nvl( t1.c01, 0 ) + nvl( t1.c02, 0 ) + nvl( t1.c05, 0 ) + nvl( t1.c06, 0 ) +
 nvl( t1.c07, 0 ) + nvl( t1.c09, 0 ) + nvl( t1.c10, 0 ) + nvl( t1.c11, 0 ) 
+ nvl( t1.c12, 0 ) + nvl( t1.c14, 0 ) + nvl( t1.c19, 0 ) + nvl( t1.c30, 0 ) + nvl( t1.c35, 0 ) + nvl( t1.c98, 0 ) + nvl( t1.c99, 0 ) )
--通过nvl()函数可以在求和的时候避免出现空值

 3、lag() over()函数组合实现字段推动

-- r_count 推动字段 1 推动条数(正为向上负为向下) PARTITION BY 分段字段
lag ( r_count, 1 ) over ( PARTITION BY ABC,ORDER BY year_month ASC )

 4、decode()和 sign()结合妙用

复制代码
DECODE(endDate,startDate,to_char(last_day(to_date('endDate','yyyy-mm')),'dd')
--decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,其他)
--相当于
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF
SIGN(a-b)  -- 当a-b< 0返回-1当a-b>0返回1当a-b=0返回0
--DECODE 和 SIGN 结合
DECODE (SIGN(a-b),1,大于时的返回结果,0,等于时的返回结果,-1,小于时的返回结果)
复制代码

5.pivot巧妙行转列

复制代码
行转列
--CD_SYS_FETY_ID 即要转成列的字段 max(TOTAL_MONEY) 此处必须为聚合函数,in () 对要转成列的每一个值指定一个列名
select *
        from tab pivot(
            max(TOTAL_MONEY) for CD_SYS_FETY_ID in (   
                    '0001' AS C0001,
                    '0002' AS C0002,
                    '0003' AS C0003,
                    '0004' AS C0004,
                    '0005' AS C0005
            )
        )
复制代码

 

posted @   过氧化氢  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示