comname      name     sex 
1公司        小王 男  
1公司        小李 女  
2公司        小张 男   
  我想将同公司的内容合在一起如:
comname      name         sex   
1公司    小王,小李    男,女  
2公司       小张          男

解决方案 »

  1.   

    写一个函数吧,使用 table function ,速度快,逻辑清楚
      

  2.   

    table funcation 很好用的
    在 oracle 文档中 PL/SQL User's Guide and Reference Release 2 (9.2)
    有详细的解释,给你个复杂的例子吧CREATE TABLE StockTable (
      ticker VARCHAR(4),
      open_price NUMBER,
      close_price NUMBER
    );
    CREATE TYPE TickerType AS OBJECT 
    (
      ticker VARCHAR2(4),
      PriceType VARCHAR2(1),
      price NUMBER
    );CREATE TYPE TickerTypeSet AS TABLE OF TickerType;CREATE PACKAGE refcur_pkg IS
      TYPE refcur_t IS REF CURSOR RETURN StockTable%ROWTYPE;
    END refcur_pkg;
    /
    CREATE FUNCTION StockPivot(p refcur_pkg.refcur_t) RETURN TickerTypeSet
    PIPELINED IS
      out_rec TickerType := TickerType(NULL,NULL,NULL);
      in_rec p%ROWTYPE;
    BEGIN
      LOOP
        FETCH p INTO in_rec; 
        EXIT WHEN p%NOTFOUND;
        -- first row
        out_rec.ticker := in_rec.Ticker;
        out_rec.PriceType := 'O';
        out_rec.price := in_rec.OpenPrice;
        PIPE ROW(out_rec);
        -- second row
        out_rec.PriceType := 'C';   
        out_rec.Price := in_rec.ClosePrice;
        PIPE ROW(out_rec);
      END LOOP;
      CLOSE p;
      RETURN;
    END;
    /SELECT x.Ticker, x.Price 
    FROM TABLE(StockPivot(  CURSOR(SELECT * FROM StockTable))) x
    WHERE x.PriceType='C';
      

  3.   

    上面例子中 FUNCTION StockPivot 是 1 行拆成2行的例子,
    你的需求刚好相反,是多行合并一行,原理是一样的
      

  4.   

    做一个函数,公司名作为函数的参数,在函数中定义一个游标,把这个公司下的数据累加到一行里。然后返回。在查询的时候group by 公司名即可。