请教一个 SQL 的问题,如何简化 oracle 的 sql?

2020-01-08 10:06:25 +08:00
 ukipoi

问题是这样的,是我写了一个 sql,但是实际运行是程序解析 sql 语句来执行的。
但是执行的时候程序出了栈溢出的错误,好像是正则解析的时候出了问题。
所以我想是不是要简化我的 sql,不过不是对 sql 很熟。
sql 主要是查询 table_b 的表中两个时间段的数据,合成一个表,然后关联下其他表中的字段,请问我该如何把这个 sql 弄的更简单写呢?

--加上 table_d 表的 id 字段
--时间用的这么复杂是因为到时候'2019-12-01 00:00:00'是程序传入的值
select n.id,m.d_id,m.i_id,m.item1_add,m.item2_add,m.item1_ini,m.item1_fin,m.item2_ini,m.item2_fin,m.item_r,m.data_month from
    (
        --把 item 的结果值乘以一个倍率,带上 table_c 表的 d_id 字段
        select item1_ini,item1_fin,item2_ini,item2_fin,item_r,i_id,d_id,item1*nvl(item_r,0) as item1_add,item2*nvl(item_r,0) as item2_add,
            to_date(to_char(to_date('2019-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm'),'yyyy-mm') as data_month from
            (
                --对查出来的结果新增两个计算结果的字段
                select item1_ini,item1_fin,item2_ini,item2_fin,id,i_id,nvl(item1_fin,0)-nvl(item1_ini,0) as item1,
                    nvl(item2_fin,0)-nvl(item2_ini,0) as item2 from
                    (
                        --查出 12 月分和 11 月分的数据合成一个新的表
                        (
                            select id,i_id,item1 as item1_fin,item2 as item2_fin from table_b where data_time like 
                                to_date(to_char(to_date('2019-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm'),'yyyy-mm')
                        ) a left join
                        (
                            select id as id_bak,i_id as i_id_bak,item1 as item1_ini,item2 as item2_ini from table_b where data_time like 
                                add_months(to_date(to_char(to_date('2019-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm'),'yyyy-mm'),-1)
                        ) b on a.id=b.id and a.i_id=b.i_id
                    )
            ) c left join 
            (
                select i_id as i_id_d,item_r,d_id from table_c
            ) d on c.i_id=d.i_id_d
    ) m,table_d n where m.d_id=n.dp_id
479 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/636015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX