不好意思啊, 又来提问了. 现在呢是这样, 比如从数据库查到3条记录 (3个人名儿), 然后想组成一个字符串输出 (比如: "傻子, 弱智, 白痴"). 我知道用存储过程可以实现; 但现在的系统因为要Oracle和MySQL数据库无缝移植所以好像不能用存储过程. 所以想请大家帮着想个SQL语句来实现这个功能, 谢谢大家!!

解决方案 »

  1.   

    行转列的功能!
    网上的例子很多!
    http://cosio.itpub.net!
      

  2.   

    http://topic.csdn.net/u/20090408/15/275bb681-0f03-422e-9af2-4d924969f0ff.html
      

  3.   

    10G
    select wmsys.wm_concat(name) from yourtable
      

  4.   

    LS的ORACLE专有函数肯定也不能用的,LZ要考虑的是Oracle和MySQL数据库无缝移植
      

  5.   

    SQL> select t.* from test_row_cell t;        ID NAME
    ---------- --------------------
             1 A
             2 B
             3 C
             4 D
             5 E
             6 F
             1 B
             1 C
             4 A
             4 B
             4 C11 rows selectedSQL> 
    SQL> SELECT id, str
      2    FROM (SELECT id,
      3                 row_number() over(PARTITION BY id ORDER BY name) AS rn,
      4                 name || lead(',' || name, 1) over(PARTITION BY id ORDER BY name) || lead(',' || name, 2) over(PARTITION BY id ORDER BY name) || lead(',' || name, 3) over(PARTITION BY id ORDER BY name) AS str
      5            FROM test_row_cell)
      6   WHERE rn = 1
      7   ORDER BY 1;        ID STR
    ---------- --------------------------------------------------------------------------------
             1 A,B,C
             2 B
             3 C
             4 A,B,C,D
             5 E
             6 F6 rows selected
      

  6.   

    谢谢大家的的回复!! 虽然现在暂时只看懂了3楼的语句. 不过啊... 嗯... 7楼的虽然还没看名白但是... 这个确实也可以在MySQL下执行么? 3楼的应该是只能在Oracle下执行吧 (也没关系, 先运行起来再说). 嗯... 反正现在就是查到了3个名字, 比如: "select NAME from EMP where SALARY = 1000"; 那么如果只针对这句话的话, 除了用Oracle专用的函数外, 要怎么修改才可以实现把3个名字组成一个字符串呢? 谢谢!!
      

  7.   

    lz可以考虑把数据在oracle里处理好了之后,存到临时表里,在移植过去,不一定非要直接移植的时候处理。除了oracle专用函数外,估计只能用存储过程了。
      

  8.   

    哦,mysql好像不能用row_number 。。很多oracle特有的函数都不能用,又不给用存储过程,这个。。
      

  9.   

    这种需求想要做到无缝移植,就会写得很麻烦
    单ORACLE有比较简单的方法如三楼的