<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      如何將葉子節(jié)點(diǎn)的數(shù)據(jù)合計(jì)到父節(jié)點(diǎn) by Oracle 10g

      原文地址在這里:【難題】如何將葉子節(jié)點(diǎn)的數(shù)據(jù)合計(jì)到父節(jié)點(diǎn),原文已經(jīng)不能回復(fù)了,在這里寫下解法。

      題目簡單描述如下:

      有數(shù)據(jù)表結(jié)構(gòu)如下,只有葉子節(jié)點(diǎn)有數(shù)據(jù):

      id  parentId    name        amount
      1               成本     
      2    1          工資   
      3    2          基本工資    1000  
      4    2          獎(jiǎng)金        200
      5    1          保險(xiǎn)        400

      現(xiàn)在想統(tǒng)計(jì)處父節(jié)點(diǎn)合計(jì)數(shù) ,如下:

      id      name       amount
      1       成本       1600    //2 + 5
      2       工資       1200    //3 + 4
      3       基本工資   1000  
      4       獎(jiǎng)金       200
      5       保險(xiǎn)       400

      作者要求是Oracle數(shù)據(jù)庫。

      由于功力不夠求助了ITPUB上的大牛,也得到了精妙的回復(fù),在這里記錄一下:

      為節(jié)省篇幅,使用CTE語法構(gòu)建臨時(shí)表,不再建表了:

      with tmp as (
        select 1 as id , null as parentid , '成本' as name , null as amount from dual union all
        select 2,1 , '工資', null from dual union all
        select 3,2 , '基本工資', 1000 from dual union all
        select 4,2 , '獎(jiǎng)金' , 200 from dual union all
        select 5,1 , '保險(xiǎn)' , 400 from dual
      )
      select * from tmp 
      ID                     PARENTID               NAME     AMOUNT                 
      ---------------------- ---------------------- -------- ----------------------
      1                                             成本                           
      2                      1                      工資                           
      3                      2                      基本工資  1000                  
      4                      2                      獎(jiǎng)金     200                    
      5                      1                      保險(xiǎn)     400  

      首先是來自2樓newkid的解法:

      SELECT root_id,SUM(amount)
        FROM (
          select CONNECT_BY_ROOT(id) root_id,amount
            from tmp
           WHERE CONNECT_BY_ISLEAF=1
         CONNECT BY PRIOR id = parentid
      )
      GROUP BY root_id;

      然后是3樓dingjun123的解法:

      SELECT id,parentid,name,
        ( SELECT SUM(amount) 
            FROM tmp a
           START WITH a.id=b.id
         CONNECT BY PRIOR a.id=a.parentid ) sum_sal
        FROM tmp b
       ORDER BY 1;

      基本思路都是利用 connect by 子句自根節(jié)點(diǎn)/分支節(jié)點(diǎn)往葉子結(jié)點(diǎn)搜索,找出不同的根節(jié)點(diǎn)/分支節(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑再求和,修改一下newkid的子查詢并查看一下結(jié)果集就比較明了:

        select CONNECT_BY_ROOT(id) start_id,id leaf_id,amount
         from tmp
        WHERE CONNECT_BY_ISLEAF=1
      CONNECT BY PRIOR id = parentid
        START_ID    LEAF_ID     AMOUNT
      ---------- ---------- ----------
               1          3       1000
               1          4        200
               1          5        400
               2          3       1000
               2          4        200
               3          3       1000
               4          4        200
               5          5        400

      start_id 就是開始查找(不是start with)的節(jié)點(diǎn)id,leaf_id就是葉子節(jié)點(diǎn)的id,用圖來幫助分析:

      image

      可以看到id=1的節(jié)點(diǎn),也就是根節(jié)點(diǎn)的值等于三個(gè)葉子節(jié)點(diǎn)的值的總和,葉子節(jié)點(diǎn)的值是明確的。

      下一篇將會(huì)使用SQL Server遞歸CTE語句對該問題求解,請留意。

      posted @ 2010-07-31 18:26  killkill  閱讀(3870)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 久久精品亚洲中文无东京热| 亚洲精品一区二区妖精| 亚洲综合伊人久久大杳蕉| 一区二区在线观看 激情| 2020国产成人精品视频| 久久国产一区二区日韩av| 搡老熟女老女人一区二区| 99精品国产在热久久婷婷| 久久99精品久久久久久9| 亚洲狠狠婷婷综合久久久久图片| 亚洲国产欧美在线人成aaaa| 无码人妻丝袜在线视频| 131mm少妇做爰视频| 激情国产一区二区三区四| 性欧美牲交在线视频| 久热这里只有精品12| 日韩区二区三区中文字幕| 99re热视频这里只精品| 国产精品一区二区在线欢| 国产午精品午夜福利757视频播放 国产午夜亚洲精品国产成人 | 国产卡一卡二卡三免费入口| WWW丫丫国产成人精品| 久99久热只有精品国产99| 国产精品午夜福利合集| 欧美韩中文精品有码视频在线 | 激情亚洲专区一区二区三区| 欧美在线一区二区三区精品| 国产精品人成视频免| 欧美午夜精品久久久久久浪潮| 国产在线啪| 国产线播放免费人成视频播放| 彩票| 成全影视大全在线观看| 色婷婷久久综合中文久久一本| 国产精品免费视频不卡| 亚洲国产成人精品女久久| 波多野结衣av一区二区三区中文| 奇米四色7777中文字幕| 国产成人久久精品流白浆| 欧美变态另类zozo| 国产自拍偷拍视频在线观看|