<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Rising Sun

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      148 隨筆 :: 0 文章 :: 22 評(píng)論 :: 0 Trackbacks

     

    問(wèn)?: 
    表:
    col1 col2 col3
    1.5 a
    1.5 b
    2.5 c
    2.5 d
    5.5 e
    5.5 f
    1.2 g
    1.2 h
    1.2 i
    1.1 j

    我想取得這樣的結(jié)果:
    1.5 a,b
    2.5 c,d
    1.1 J
    1.2 i
    5.5 e,f
    1.2 h

    也就是按col1、col2分組統(tǒng)計(jì),將col3的值用“,”連接起來(lái)。

    其中col1 是 字符型 col2是數(shù)字型。這兩個(gè)字段的唯一值的個(gè)數(shù)是未知的

    不知該如何才能做到,請(qǐng)各位高手幫忙。


    答!: 
    1:
    id name
    1 aa
    2 bb
    3 cc
    4 dd
    1 ee
    1 xxx
    ID相同的行只顯示一條記錄并把相同ID的NAME加起來(lái)用,隔開(kāi)
    怎么搞
    ???
    我需要的結(jié)果集是: 
    id name
    1 aa,ee,xxx
    2 bb
    3 cc
    4 dd
    ---------------------------------
    假設(shè)你的table 是 tmp_1;
    --------------------------------------------
    create table tmp_2 as select 
    * from tmp_1 where 1=2;
    insert into tmp_2 select distinct id,
    null from tmp_1;
    declare
    i number(
    4);
    cursor c_v is select 
    * from ttmp_1;
    begin 
    for v_n in c loop
    select count(
    *) into i from ttmp_2 b where b.name is not null and b.id=v_n.id;
    if i=0 then
    update ttmp_2 a set name 
    = v_n.name where a.id=v_n.id;
    else
    update ttmp_2 a set name 
    = name||','||v_n.name where a.id=v_n.id;
    end 
    if;
    end loop;
    end;
    /
    ------------------------------------
    或許以下的更有幫助

    給你看看duanzilin (尋)的文章吧,一個(gè)強(qiáng)貼,地址忘記了,還好有保存


    主  題: 原創(chuàng)+突發(fā)奇想+分享+散分-----關(guān)于分組后字段拼接的問(wèn)題

    作  者: duanzilin (尋) 
    信 譽(yù) 值: 
    120 
    所屬論壇: Oracle 基礎(chǔ)和管理 
    問(wèn)題點(diǎn)數(shù): 
    200 
    回復(fù)次數(shù): 
    29 
    發(fā)表時(shí)間: 
    2005-7-22 11:52:56 





    最近在論壇上,經(jīng)常會(huì)看到關(guān)于分組后字段拼接的問(wèn)題,
    大概是類似下列的情形:
    SQL
    > select no,q from test
    2 /

    NO Q
    ---------- ------------------------------
    001 n1
    001 n2
    001 n3
    001 n4
    001 n5
    002 m1
    003 t1
    003 t2
    003 t3
    003 t4
    003 t5
    003 t6

    12 rows selected

    最后要得到類似于如下的結(jié)果:
    001 n1;n2;n3;n4;n5
    002 m1
    003 t1;t2;t3;t4;t5;t6

    通常大家都認(rèn)為這類問(wèn)題無(wú)法用一句SQL解決,本來(lái)我也這么認(rèn)為,可是今天無(wú)意中突然有了靈感,原來(lái)是可以這么做的:
    前幾天有人提到過(guò)sys_connect_by_path的用法,我想這里是不是也能用到這個(gè)方法,如果能做到的話,不用函數(shù)或存貯過(guò)程也可以做到了;要用到sys_connect_by_path,首先要自己構(gòu)建樹(shù)型的結(jié)構(gòu),并且樹(shù)的每個(gè)分支都是單根的,例如1
    -2-3-4,不會(huì)存在1-21-〉3的情況;
    我是這么構(gòu)建樹(shù),很簡(jiǎn)單的,看下面的結(jié)果就會(huì)知道了:
    SQL
    > select no,q,rn,lead(rn) over(partition by no order by rn) rn1
    2 from (select no,q,row_number() over(order by no,q desc) rn from test)
    3 /

    NO Q RN RN1
    ---------- ------------------------------ ---------- ----------
    001 n5 1 2
    001 n4 2 3
    001 n3 3 4
    001 n2 4 5
    001 n1 5 
    002 m1 6 
    003 t6 7 8
    003 t5 8 9
    003 t4 9 10
    003 t3 10 11
    003 t2 11 12
    003 t1 12 

    12 rows selected

    有了這個(gè)樹(shù)型的結(jié)構(gòu),接下來(lái)的事就好辦了,只要取出擁有全路徑的那個(gè)path,問(wèn)題就解決了,先看no
    =001’的分組:
    select no,sys_connect_by_path(q,
    ';') result from 
    (select no,q,rn,lead(rn) over(partition by no order by rn) rn1 
    from (select no,q,row_number() over(order by no,q desc) rn from test)
    )
    start with no 
    = '001' and rn1 is null connect by rn1 = prior rn
    SQL
    > 
    6 /

    NO RESULT
    ---------- --------------------------------------------------------------------------------
    001 ;n1
    001 ;n1;n2
    001 ;n1;n2;n3
    001 ;n1;n2;n3;n4
    001 ;n1;n2;n3;n4;n5

    上面結(jié)果的最后1條就是我們要得結(jié)果了
    要得到每組的結(jié)果,可以下面這樣

    select t.
    *,
    (
    select max(sys_connect_by_path(q,
    ';')) result from 
    (select no,q,rn,lead(rn) over(partition by no order by rn) rn1 
    from (select no,q,row_number() over(order by no,q desc) rn from test)
    )
    start with no 
    = t.no and rn1 is null connect by rn1 = prior rn
    ) value
    from (select distinct no from test) t

    SQL
    > 
    10 /

    NO VALUE
    ---------- --------------------------------------------------------------------------------
    001 ;n1;n2;n3;n4;n5
    002 ;m1
    003 ;t1;t2;t3;t4;t5;t6

    對(duì)上面結(jié)果稍加處理就可以了,希望對(duì)大家有幫助:) 
    答!: 
    2:
    注意注意 

    sys_connect_by_path有長(zhǎng)度限制,不能超過(guò)4K 
    posted on 2007-09-13 10:14 brock 閱讀(552) 評(píng)論(0)  編輯  收藏 所屬分類: oracle 數(shù)據(jù)庫(kù)
    主站蜘蛛池模板: 亚洲成a人片7777| 亚洲午夜未满十八勿入网站2| 四虎在线免费视频| 免费女人高潮流视频在线观看 | 亚洲人成色7777在线观看| 亚洲女同成人AⅤ人片在线观看| 亚洲Av无码乱码在线znlu| 一区国严二区亚洲三区| 亚洲国产成人精品无码久久久久久综合 | 亚洲a一级免费视频| 久热综合在线亚洲精品| 亚洲欧洲一区二区| 亚洲精品不卡视频| 亚洲精品中文字幕无乱码麻豆| 亚洲天堂2016| 美女羞羞免费视频网站| 一级做a爰片性色毛片免费网站| 国产精品免费视频观看拍拍 | 亚洲a级成人片在线观看| 国产亚洲sss在线播放| 亚洲欧美日韩一区二区三区 | 午夜影视日本亚洲欧洲精品一区| 亚洲日韩国产精品无码av| 亚洲va久久久久| 色欲色欲天天天www亚洲伊| 日韩精品无码永久免费网站| a国产成人免费视频| 84pao强力永久免费高清| 毛片a级三毛片免费播放| 国产精品国产免费无码专区不卡| 免费成人黄色大片| 亚洲va中文字幕无码久久不卡| 久久亚洲AV成人无码软件| 中文字幕无码精品亚洲资源网久久| 无码亚洲成a人在线观看| 在线观看免费无码视频| 五月婷婷在线免费观看| 免费国产成人午夜电影| 亚洲AV无码一区东京热| 天堂亚洲国产中文在线| 一区二区三区在线观看免费|