oracle大型汇总报表写法及技巧

1.max()求最大值,to_number(x)x列的值变成数字

select max(to_number(t.f_629297609413340))   FROM DEFINE_628653665704647 t

2.设定列的值必须为存在,若为空,则就将其设置为0

nvl(sum(f_629153532773903), 0)

3.decode字句来判断(相当与三元表达式?),允许存在判断,分母不为0则进行除法运算,否则设定结果为0,并以百分比保留两位小数的形式显示。||作为连接符号

 round(decode(qnljtotal, 0, 0, (jnljtotal -qnljtotal) / qnljtotal),4)*100||'%'

4.整体sql结构是按照嵌套形式

select * from (select * from tableA

                )A,

                (...

                )B,

                (..

                )C,

                (..

                )D,

...

where A.a=B.a  and ...

5.设定列的显示值,指定列的特定值

select jn 本月 , qn 上年同期 , 'XX路局' as tylj from tableA

6.AB两表记录合并时,记录条数以多的为标准,记录少的以空填充,想以那个为标准就放到前面,在末尾加上(+

where luju.A = fy.B(+)

而且必须符合这种格式

    Stringjt_huizong_sql = "SELECT"+

    "        COUNT(F_500696467191640)"+

    "       ,zz.value"+

    "   FROM"+

    "       ("+

    "           SELECT"+

    "                   F_500696467191640"+

    "               FROM"+

    "                   DEFINE_18027099115506"+

    "               WHERE"+

    "                   F_19360672616040 = 'XX公司'"+

    "       )"+

    "       ,("+

    "           SELECT"+

    "                   value"+

    "               FROM"+

    "                       t_sys_code_value"+

    "               WHERE"+

    "                   code_id = '4028810634e06f190134e4094ad500b9'"+

    "        )zz"+

    "   WHERE"+

    "       zz.value = F_500696467191640(+)"+

    "    GROUPBY"+

    "       zz.value";

7.按照指定的顺序排列,需要指定列和顺序

order by decode(jn.lj,'XX南区',1,'XX北区',2,'XX路局',3,'XX路局',4)

8.case when 字句来判断

select case when 条件1 then 值1 else when 条件2 then 值2 else 值3 end as 字段别名

from table

9.将时间直接转换为年月日周季度...

季度:to_char(to_date(f_2710025473791766,'yyyy/MM/dd'), 'yyyy-Q')

周:to_char(to_date(f_2710025473791766,'yyyy/MM/dd'), 'yyyy-IW')

10.同比、环比

      selectsum(casewhen xsdate between to_date('2010-10-7','yyyy-mm-dd') andto_date('2010-10-8','yyyy-mm-dd') then xsje else0end) "本期销售额",

  2        sum(casewhen xsdate between add_months(to_date('2010-10-7','yyyy-mm-dd'),-12) and add_months(to_date('2010-10-8','yyyy-mm-dd'),-12) then xsje else0end) "同比销售额",

  3        sum(casewhen xsdate between add_months(to_date('2010-10-7','yyyy-mm-dd'),-1) and add_months(to_date('2010-10-8','yyyy-mm-dd'),-1) then xsje else0end) "环比销售额

4   from xsb

  5  where xsdate between to_date('2010-10-7','yyyy-mm-dd') andto_date('2010-10-8','yyyy-mm-dd')

  6    or xsdate between add_months(to_date('2010-10-7','yyyy-mm-dd'),-1) and add_months(to_date('2010-10-8','yyyy-mm-dd'),-1)

  7    or xsdate between add_months(to_date('2010-10-7','yyyy-mm-dd'),-12) and add_months(to_date('2010-10-8','yyyy-mm-dd'),-12);

11.同比环比

    SELECT

            f_2710025473791766

            ,f_9015659754374204

            ,TO_DATE(f_2710025473791766, 'yyyy-mm-dd')

            ,TO_DATE('2011-10-7', 'yyyy-mm-dd')

            ,TO_DATE('2011-12-8', 'yyyy-mm-dd')

            ,SUM(CASE

                WHENTO_DATE(f_2710025473791766, 'yyyy-mm-dd') BETWEENTO_DATE('2011-10-7', 'yyyy-mm-dd') ANDTO_DATE('2011-12-8', 'yyyy-mm-dd') THENTO_NUMBER(f_9015659754374204)

                ELSE 0

            END) "本期销售额"

            ,SUM(CASE

                WHENTO_DATE(f_2710025473791766, 'yyyy-mm-dd') BETWEENADD_MONTHS(TO_DATE('2010-10-7', 'yyyy-mm-dd'), -12) ANDADD_MONTHS(TO_DATE('2010-10-8', 'yyyy-mm-dd'), -12) THENTO_NUMBER(f_9015659754374204)

                ELSE 0

            END) "同比销售额"

            ,SUM(CASE

                WHENTO_DATE(f_2710025473791766, 'yyyy-mm-dd') BETWEENADD_MONTHS(TO_DATE('2010-10-7', 'yyyy-mm-dd'), -1) ANDADD_MONTHS(TO_DATE('2010-10-8', 'yyyy-mm-dd'), -1) THENTO_NUMBER(f_9015659754374204)

                ELSE 0

            END) "环比销售额"

        FROM

            DEFINE_9015449917435662

        WHERE

            TO_DATE(f_2710025473791766, 'yyyy-mm-dd') BETWEENTO_DATE('2011-10-7', 'yyyy-mm-dd')ANDTO_DATE('2011-12-8', 'yyyy-mm-dd')

            ORTO_DATE(f_2710025473791766, 'yyyy-mm-dd') BETWEENADD_MONTHS(TO_DATE('2011-10-7', 'yyyy-mm-dd'), -1) ANDADD_MONTHS(TO_DATE('2011-12-8', 'yyyy-mm-dd'), -1)

            ORTO_DATE(f_2710025473791766, 'yyyy-mm-dd') BETWEENADD_MONTHS(TO_DATE('2011-10-7', 'yyyy-mm-dd'), -12) ANDADD_MONTHS(TO_DATE('2011-12-8', 'yyyy-mm-dd'), -12)

        GROUPBY

            f_2710025473791766

            ,f_9015659754374204

        ORDERBY

           f_2710025473791766

 

 

SELECT

            *

        FROM

            (

                SELECT

                        1 AS xh

                        ,f_9015678025243238

                        ,SUM(f_9015659754374204) f_9015659754374204

                        ,SUM(f_9015669858045698)f_9015669858045698

                        ,SUM(f_9015685870553478)f_9015685870553478

                        ,SUM(f_9015692383024416)f_9015692383024416

                        ,f_9015764331717434

                        ,f_9015768856239154

                    FROM

                        DEFINE_9015449917435662

                    WHERE

                        f_9015678025243238 = 'XX'

                        AND f_2710025473791766 >='2011-04'

                        AND f_2710025473791766<= '2012-05'

                    GROUPBY

                        f_9015764331717434

                        ,f_9015768856239154

                        ,f_9015678025243238

            ) jn

            ,(

                SELECT

                        2 AS xh

                        ,f_9015678025243238

                        ,NVL(SUM(f_9015659754374204), 0)f_9015659754374204

                        ,NVL(SUM(f_9015669858045698), 0)f_9015669858045698

                        ,NVL(SUM(f_9015685870553478), 0)f_9015685870553478

                        ,NVL(SUM(f_9015692383024416), 0)f_9015692383024416

                        ,f_9015764331717434

                        ,f_9015768856239154

                    FROM

                        DEFINE_9015449917435662

                    WHERE

                        f_9015678025243238 = 'XX'

                        AND f_2710025473791766>= '2010-04'

                        AND f_2710025473791766<= '2011-05'

                    GROUPBY

                        f_9015764331717434

                        ,f_9015768856239154

                        ,f_9015678025243238

            ) qn

            ,(

                SELECT

                        3 AS xh

                        ,f_9015678025243238

                        ,NVL(SUM(f_9015659754374204), 0)f_9015659754374204

                        ,NVL(SUM(f_9015669858045698), 0)f_9015669858045698

                        ,NVL(SUM(f_9015685870553478), 0)f_9015685870553478

                        ,NVL(SUM(f_9015692383024416), 0)f_9015692383024416

                        ,f_9015764331717434

                        ,f_9015768856239154

                    FROM

                        DEFINE_9015449917435662

                    WHERE

                        f_9015678025243238 = 'XX'

                        AND f_2710025473791766>= '2011-03'

                        AND f_2710025473791766<= '2012-04'

                    GROUPBY

                        f_9015764331717434

                        ,f_9015768856239154

                        ,f_9015678025243238

            ) sy

        WHERE

            (

                TO_NUMBER(jn.f_9015764331717434) -1

            ) = qn.f_9015764331717434(+)

            AND jn.f_9015768856239154 =qn.f_9015768856239154(+)

            andcasewhenTO_NUMBER(jn.f_9015768856239154)==12

            then jn.f_9015764331717434 =sy.f_9015764331717434(+) and

            anddecode(TO_NUMBER(jn.f_9015768856239154),1, 12, jn.f_9015768856239154)

           

            AND jn.f_9015764331717434 =sy.f_9015764331717434(+)

            AND (

                TO_NUMBER(jn.f_9015768856239154) -1

            ) = sy.f_9015768856239154(+)

            AND jn.f_9015678025243238 =qn.f_9015678025243238(+)

        ORDERBY

            jn.f_9015764331717434

           ,jn.f_9015768856239154

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值