zoukankan      html  css  js  c++  java
  • orcle分析函数

    一、问题描述:

    关务里拆分清单时要求:合并同一表头对应表体的 项号、币制、产销国(地区),将三个字段相同的数据归为一项,并生成一个递增的商品序号。从1开始。

    解决方法:(DENSE_RANK分析函数)

                  SELECT to_number(DENSE_RANK() OVER (PARTITION BY HEAD_OID ORDER BY HEAD_OID,EM_G_NO,CURR,COUNTRY_CODE)) as id

                         FROM GW_CUSTOMS_BILL_LIST_PRE;
    row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)  不存在相同序号 如: 1,2,3,4
    rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)  如:1 ,2 ,2 ,4
    dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。 如:1 ,2 ,2 ,3

    PARTITION BY:分组条件,就是按哪些字段进行分组

    ORDER BY:组内排序


    二、问题描述
    问题描述:B表:为币制表,有 币制、日期 字段,同一个币制在不同时期的汇率是不一样的;

    A表:有 总价、币制、申报日期 字段。

    要求:

    A表根据币制关联B表取汇率,将总价转换成美元总价。

    币制取汇率方法:

    第一步(关联):关联币制得出记录(A的1条记录对就多条B的记录,结果字段:A.申报日期,A.币制,B.日期,B.汇率)

    第二步(筛选):筛选出A表的申报日期大于B表日期(汇率对应的日期必须在申报日期之前:B.日期<A.申报日期)

    第三步(取汇率):同一币制取B表中最晚日期对应的汇率。


    解决方法:(分析函数)

    select distinct a.oid, a.curr,a.dec_total,a.inserttime,b.org_curr,b.input_er,

    a.dec_total/( FIRST_VALUE(B.tax) OVER(PARTITION BY B.org_curr ORDER BY B.eff_date desc)) from gw_customs_bill_list_pre a,

     GW_INFO_TAX b where a.curr=b.org_curr and a.inserttime>b.eff_date
     

    语法:

    FIRST_VALUE(取值字段) OVER(PARTITION BY 分组字段 ORDER BY 排序字段)) from 表名

    按“分组字段”进行分组,排“排序字段”排序,

    FIRST_VALUE()取出“取值字段”记录中最大的值。

    三、按关健字分组,排序后,加序号。

    select exchange_rate_date, base_curr, change_curr,
    row_number() over(partition by exchange_rate_date, base_curr, change_curr order by modify_date) id
    FROM bi_exchange_rate

  • 相关阅读:
    Java基础教程:面向对象编程[3]
    Java拓展教程:文件DES加解密
    JavaScript:学习笔记(4)——This关键字
    jQuery:[2]百度地图开发平台实战
    Android开发——减小APK大小
    玩转ButterKnife注入框架
    Java技术——多态的实现原理
    RxAndroid结合Retrofit,看看谁才是最佳拍档!
    Android开发——AsyncTask的使用以及源码解析
    10本比较鸡肋的技术类书籍,简要回顾
  • 原文地址:https://www.cnblogs.com/xbding/p/2336788.html
Copyright © 2011-2022 走看看