ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 由业务需求引起的left join & right join

由业务需求引起的left join & right join

原创 Linux操作系统 作者:golden_zhou 时间:2012-08-09 10:42:34 0 删除 编辑
CREATE OR REPLACE FORCE VIEW TOPUP.VIEW_FINANCE_SALESTAT_AGENT
(
   ID,
   STATDATE,
   AGENTID,
   PARMONEY,
   ACTUALMONEY,
   INMONEY,
   OUTMONEY,
   ADDMONEY,
   INDISCOUNT,
   OUTDISCOUNT,
   AGENTNAME,
   CREATEDATE,
   LASTDATE,
   PROFITRATE,
   GROSSPROFIT,
   CORRECTPAR,
   CORRECTMONEY,
   BATCH,
   BALANCE
)
AS
     SELECT   u.id,
              u.statdate,
              u.GROUP_ID,
              u.parmoney,
              actualmoney,
              u.inmoney,
              u.outmoney,
              NVL (u.addmoney, 0),
              CASE
                 WHEN actualmoney = 0 THEN 0
                 ELSE u.inmoney / u.actualmoney
              END
                 AS indiscount,
              CASE
                 WHEN actualmoney = 0 THEN 0
                 ELSE u.outmoney / u.actualmoney
              END
                 AS outdiscount,
              g.logogram,
              u.createdate,
              u.lastdate,
              CASE
                 WHEN u.actualmoney - u.inmoney = 0 THEN 0
                 ELSE (u.outmoney - u.inmoney) / (u.actualmoney - u.inmoney)
              END
                 AS profitrate,
              (u.outmoney - u.inmoney),
              NVL (refundmoney, 0),
              NVL (refundprice, 0),
              '',
              NVL (u.balance, 0)
       FROM         (SELECT   t.id id,
                              t.statdate,
                              t.GROUP_ID,
                              t.parmoney,
                              t.actualmoney,
                              t.inmoney,
                              t.outmoney,
                              t.createdate,
                              t.lastdate,
                              m.addmoney,
                              m.balance
                       FROM      (  SELECT   MIN (a.id) id,
                                             a.statdate,
                                             a.GROUP_ID,
                                             SUM (a.parmoney) parmoney,
                                             SUM (a.actualmoney) actualmoney,
                                             SUM (a.inmoney) inmoney,
                                             SUM (a.outmoney) outmoney,
                                             MIN (a.createdate) createdate,
                                             MIN (a.lastdate) lastdate
                                      FROM   tab_topup_stat_agent a
                                  GROUP BY   a.statdate, a.GROUP_ID) t
                              LEFT JOIN
                                 tab_topup_stat_money m
                              ON t.GROUP_ID = m.GROUP_ID
                                 AND t.statdate = m.statdate
                     UNION
                     SELECT   m.id,
                              m.statdate,
                              m.GROUP_ID,
                              0 parmoney,
                              0 actualmoney,
                              0 inmoney,
                              0 outmoney,
                              m.createdate,
                              m.lastdate,
                              m.addmoney,
                              m.balance
                       FROM      (  SELECT   MIN (a.id) id,
                                             a.statdate,
                                             a.GROUP_ID,
                                             SUM (a.parmoney) parmoney,
                                             SUM (a.actualmoney) actualmoney,
                                             SUM (a.inmoney) inmoney,
                                             SUM (a.outmoney) outmoney,
                                             MIN (a.createdate) createdate,
                                             MIN (a.lastdate) lastdate
                                      FROM   tab_topup_stat_agent a
                                  GROUP BY   a.statdate, a.GROUP_ID) t
                              RIGHT JOIN
                                 tab_topup_stat_money m
                              ON t.GROUP_ID = m.GROUP_ID
                                 AND t.statdate = m.statdate
                      WHERE   m.addmoney > 0 AND t.GROUP_ID IS NULL) u
                 LEFT JOIN
                    tab_base_group g
                 ON u.GROUP_ID = g.id
              LEFT JOIN
                 (  SELECT   SUM (aoi.refundmoney) refundmoney,
                             SUM (aoi.refundprice) refundprice,
                             aoi.statdate,
                             aoi.agent_id
                      FROM   tab_topup_auditorderitem aoi
                  GROUP BY   aoi.STATDATE, aoi.agent_id) t3
              ON g.id = t3.agent_id AND u.statdate = t3.statdate
   ORDER BY   u.id;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25198367/viewspace-740474/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-03-09

  • 博文量
    238
  • 访问量
    344440