现有一张表,内容如下:
ID      NAME      A
1       张三      a
1       张三      b
2       李四      a
3       王五      a
3       王五      b
3       王五      c通过查询得出如下结果:
ID      NAME      A
1       张三      a,b
2       李四      a
3       王五      a,b,c要达到这种查询结果,语句应该怎么写?

解决方案 »

  1.   

    wm_concatselect id,name,wm_concat(A) as A from table
    group by id,name
      

  2.   

    用了Wm_concat 提示无效标识符,什么情况  - -#
      

  3.   


    select id,name,wmsys.wm_concat(A) A from table
    group by id,name
      

  4.   

    也是提示无效标识符。
    我用的PL/SQL Developer进行查询操作。
      

  5.   

    那怪了,我用的是G11,也是PL/SQL Developer 怎么没有出现错误
      

  6.   

    我这边是10g版本的,即使写成wmsys.wm_concat()也是不行的,在wmsys下面就没有wm_concat这个函数不知道什么情况。悲剧了
      

  7.   

    我在我这边查询select ope_id,wmsys.wm_concat(card_code) a,card_stateid  from t_card_iccard
    group by ope_id,card_stateid-------------------------------------------------------------
    ope_id    a             card_stateid
    1 11228432 6
    2 11228443 6
    3 11228442 6
    4 101,110,109,108,107,106,105,104,103,102 4
    5 111 1
      

  8.   

    我在我这边查询select ope_id,wmsys.wm_concat(card_code) a,card_stateid  from t_card_iccard
    group by ope_id,card_stateid-------------------------------------------------------------
    ope_id    a             card_stateid
    1 11228432 6
    2 11228443 6
    3 11228442 6
    4 101,110,109,108,107,106,105,104,103,102 4
    5 111 1
      

  9.   

    这个是函数,跟版本没关系的,wmsys.wm_concat这个函数,它的作用是以','链接字符用的。
      

  10.   

    DROP TABLE foo;
    CREATE TABLE foo(
      fooid NUMBER(20),
      fooname VARCHAR2(20),
      foobar VARCHAR2(20)
    );
    INSERT INTO foo VALUES('1','张三','a');
    INSERT INTO foo VALUES('1','张三','b');
    INSERT INTO foo VALUES('2','李四','a');
    INSERT INTO foo VALUES('3','王五','a');
    INSERT INTO foo VALUES('3','王五','b');
    INSERT INTO foo VALUES('3','王五','c');SELECT * FROM foo;SELECT foo.fooid,foo.fooname,
         MAX(CASE WHEN foo.foobar='a' THEN foo.foobar END) AS A,
         MAX(CASE WHEN foo.foobar='b' THEN foo.foobar END) AS B,
         MAX(CASE WHEN foo.foobar='c' THEN foo.foobar END) AS C
    FROM foo
    GROUP BY foo.fooid,foo.fooname
    ORDER BY 1
      

  11.   

    我查了些资料,说是10G以上版本才有这个函数,我自己机子上是10G的,服务器是9I的,不知道是不是因为这个原因而造成不能用谢咯
      

  12.   

    最简单的还是 11gR2 的 LISTAGG 函数。