一、下面有两个表:
  HEADER_INFO 头表字段:    COLUMN NAME      COMMENT
      HEADER_ID       头表ID
    HEADER_NAME     头表名称
  LINE_INFO 行表字段     COLUMN NAME      COMMENT
       HEADER_ID       头表ID
       LINE_ID         行表ID
     LINE_NAME      行表名称
     LINE_QTY    行表数量二、在GROUP BY 语句中,要求行表数量的汇总,也要把多条行表信息的名称,以逗号的形式全部显示出来,下面的语句中,NAME_INFO字段该如何写?请指教,谢谢
 SELECT 
     B.HEADER_ID,
     SUM(LINE_QTY),  
     -- 以  “行表名称A,行表名称B,行表名称C” 的形式显示 AS NAME_INFO
 FROM 
     HEADER_INFO A , LINE_INFO B
 WHERE 
     A.HEADER_ID = B.HEADER_ID
 GROUP BY 
     B.HEADER_ID

解决方案 »

  1.   

    SELECT  
         DISTINCT B.HEADER_ID,
         A.HEADER_NAME, 
         (SELECT  
             SUM(LINE_QTY),   
          FROM  
          LINE_INFO B WHERE  
         A.HEADER_ID = B.HEADER_ID 
     GROUP BY  
         B.HEADER_ID) AS XXX
          FROM  
         HEADER_INFO A , LINE_INFO B 
     WHERE  
         A.HEADER_ID = B.HEADER_ID 
      

  2.   

    如果數據庫是10G的就簡單
    SELECT  
         B.HEADER_ID, 
         SUM(LINE_QTY),   
         wmsys.wm_concat(LINE_NAME)  AS NAME_INFO       
     FROM  
         HEADER_INFO A , LINE_INFO B 
     WHERE  
         A.HEADER_ID = B.HEADER_ID 
     GROUP BY  
         B.HEADER_ID
      

  3.   

    版本不是10G的話
    可以SYS_CONNECT_BY_PATH
      

  4.   

    可否举例说明如何使用SYS_CONNECT_BY_PATH。谢谢
      

  5.   

    層次化差查詢
    SELECT SYS_CONNECT_BY_PATH(....)
    FROM TABLE 
    START WITH ....
    CONNECT BY ....
    自己去搜一下SYS_CONNECT_BY_PATH的用法就曉得了啊!
      

  6.   

    理解错了,这跟层次是没有关系的。
    如:
    GROUP   数量   名称
    1    1     A
    1    2     B
    1       3         C
    2       4         D
    2       5         E希望得到的结果是:GROUP   数量   名称
    1    6     A,B,C
    2       9         D,E
      

  7.   

    呵呵
    寫個函數也簡單啊!
    FOR C1 IN (SELECT LINE_NAME FROM LINE_INFO  WHERE.....) LOOP
       V_NAME:=C1.NAME||' '||C1.NAME
    END LOOP;
    RETURN (V_NAME);
    僅供參考啊!