我有表﹕
  模具代号    数量   位置
   A           1      1排
A           2      5排
A           1      4排
B           2      1排
B           5      6排
B           7      5排
B           8      4排
B           2      3排我想通过 sql  加总 变成 模具代号    数量   位置
A            4      1排,5排,4排
B            24     1排,6排,5排,4排,3排

解决方案 »

  1.   

    select 模具代号 ,sum(数量) as "数量 ",stragg(ename) as "位置"
    from 表 group by 模具代号 先create自定义聚集函数:(for 9i)
    create or replace type string_agg_type as object
       (
            total varchar2(4000),
            static function
              ODCIAggregateInitialize(sctx IN OUT string_agg_type )
                return number,
           member function
              ODCIAggregateIterate(self IN OUT string_agg_type ,
                                    value IN varchar2 )
                return number,   
           member function
              ODCIAggregateTerminate(self IN string_agg_type,
                                      returnValue OUT  varchar2,
                                       flags IN number)
               return number,
          member function
               ODCIAggregateMerge(self IN OUT string_agg_type,
                                   ctx2 IN string_agg_type)
               return number
       );
    /
      
    create or replace type body string_agg_type
        is
         
        static function ODCIAggregateInitialize(sctx IN OUT string_agg_type)
        return number
        is
         begin
            sctx := string_agg_type( null );
             return ODCIConst.Success;
        end;  
        member function ODCIAggregateIterate(self IN OUT string_agg_type,
                                            value IN varchar2 )
       return number
        is
       begin
            self.total := self.total || ',' || value;
            return ODCIConst.Success;
       end;
       member function ODCIAggregateTerminate(self IN string_agg_type,
                                              returnValue OUT varchar2,
                                              flags IN number)
      return number
       is
      begin
          returnValue := ltrim(self.total,',');
           return ODCIConst.Success;
       end;
       
      member function ODCIAggregateMerge(self IN OUT string_agg_type,
                                           ctx2 IN string_agg_type)
        return number
      is
      begin
      self.total := self.total || ctx2.total;
      return ODCIConst.Success;
      end;
      end;
    /
      
      CREATE or replace
      FUNCTION stragg(input varchar2 )
        RETURN varchar2
      PARALLEL_ENABLE AGGREGATE USING string_agg_type;
    /
      

  2.   

    天哪!!!!!这种帖子csdn实在太多了,先自己搜索下好不?“列转行”
      

  3.   

    创建测试数据:
    SQL> CREATE TABLE TEST(ID VARCHAR2(5), QUANTITY NUMBER, PLACE VARCHAR2(10));Table createdSQL> INSERT INTO TEST VALUES('A', 1, '1攔');1 row insertedSQL> INSERT INTO TEST VALUES('A', 2, '5攔');1 row insertedSQL> INSERT INTO TEST VALUES('A', 1, '4攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 2, '1攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 5, '6攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 7, '5攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 8, '4攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 2, '3攔');1 row insertedSQL> SELECT * FROM TEST;ID      QUANTITY PLACE
    ----- ---------- ----------
    A              1 1攔
    A              2 5攔
    A              1 4攔
    B              2 1攔
    B              5 6攔
    B              7 5攔
    B              8 4攔
    B              2 3攔8 rows selected
    生成SQL语句:
    SQL> SELECT ID, SUM(QUANTITY) QUANTITY,LTRIM(MAX(SYS_CONNECT_BY_PATH(PLACE, ',')), ',') PLACE
      2  FROM (SELECT TEST.*, MIN(PLACE) OVER(PARTITION BY ID) MIN_PLACE,
      3  (ROW_NUMBER() OVER(ORDER BY ID)) + (DENSE_RANK() OVER(ORDER BY ID)) NUMID FROM TEST)
      4  START WITH PLACE = MIN_PLACE
      5  CONNECT BY PRIOR NUMID = NUMID - 1 GROUP BY ID;ID      QUANTITY PLACE
    ----- ---------- --------------------------------------------------------------------A              4 1攔,5攔,4攔
    B             24 1攔,6攔,5攔,4攔,3攔
      

  4.   

    ID      QUANTITY PLACE
    ----- ---------- -----------------
    A              4 1攔,5攔,4攔
    B             24 1攔,6攔,5攔,4攔,3攔----------------------------
    详细解释见:
    http://spaces.msn.com/citywanderer/
    2006年1月的“较复杂的ORACLE行列转换”
      

  5.   

    boydgmx(授人以鱼不如授人以渔(baidu&google))
        能人﹐單個sql查詢語名能不能搞定啊
      

  6.   

    citywanderer2005(citywanderer) 
      我用的是 oracle 8i ,SYS_CONNECT_BY_PATH  好象沒有這個吧
      

  7.   

    http://blog.csdn.net/heyixiang/archive/2005/07/06/415444.aspx不要把所有的希望都寄托在SQL语句上!SQL可以实现,但是如果自己不是很明白,那么即便实现了也意义不大。