如何用sql把表tt:itemno,  zhi
a ,      x1
a,      x2
a,      x3
b,    x1
b,    x4
.....
转换成
itemno, zhi1,  zhi2, zhi3,....
a,       x1,   x2,    x3
b,       x1,   x4....数据很多。具体有多少个数据也不知道,有多少个值也不知道。
希望大家能够不吝赐教。
谢谢!!!

解决方案 »

  1.   

    不固定行列就很难确定要写多少个decode语句,这个比较麻烦的
      

  2.   

    想了好幾天都還不會。真郁悶。
    在網上找到這樣一個例子,但是好像還不行,
    c1 c2
    --- -----------
    1 我
    1 是
    1 谁
    2 知
    2 道
    3 不
    ……
    转换为
    1 我是谁
    2 知道
    3 不
     
    这一类型的转换可以借助于PL/SQL来完成,这里给一个例子
    CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
    RETURN VARCHAR2
    IS
    Col_c2 VARCHAR2(4000);
    BEGIN
    FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
    Col_c2 := Col_c2||cur.c2;
    END LOOP;
    Col_c2 := rtrim(Col_c2,1);
    RETURN Col_c2;
    END;
     
    select distinct c1 ,get_c2(c1) cc2 from table;希望能有高手指點
      

  3.   


    这种如楼上所说,10G一个函数就解决了
    10G以下,一句sql也能解决,就是麻烦点
      

  4.   

    谢谢楼上的指点。但是我用的是oracle 9.0, pl/sql 好像没有内部函数:wmsys.wm_concat。
    真郁闷.....
    不知道各位还有什么方法没有.....
      

  5.   

    10G用wmsys.wm_concat
    10G以下用sys_connect_by_path+row_number() over+start with connect by 来生成详细写法可以参考此贴http://topic.csdn.net/u/20080505/11/a0958b42-d938-465f-972a-0f61a2969c97.html?seed=491226048这两种方法都是只生成一个列,只不列的内容是拼出来的如果是动态产生多列,只有用存储过程去拼了,很麻烦
      

  6.   

    看这个贴子熊猫的回答,应该可以满足你的要求http://topic.csdn.net/u/20080416/11/910e40c1-60f1-441f-8b0f-19a969d30f77.html
      

  7.   

    謝謝C'est la Vie了。那個對我來說有點難。現在我暫時就放一行了。等有時間了再回過頭來改了。謝謝