2013-12-17 142 views
0

我是新來的SQL,我試圖將分散在幾行的一組評論分組。具體而言,我想彙總RMK_TEXT列,並通過RMK_LINENO訂購。甲骨文:Listagg

任何人都可以幫我嗎?

SELECT 
ALL_AGREEMENTS.AGMT_NUM, 
PROVISION_TYPES.STIP_TYPE_DESC, 
GENERAL_REMARK_TEXT.RMK_LINENO, 
LISTAGG(GENERAL_REMARK_TEXT.RMK_TEXT) WITHIN GROUP (ORDER BY GENERAL_REMARK_TEXT.RMK_LINENO) RMK_TEXT 
FROM 
    STIPULATION_PROVISIONS, 
    ALL_AGREEMENTS, 
    STIPULATION_TYPES PROVISION_TYPES, 
    GENERAL_REMARK_TEXT, 
    GENERAL_REMARKS 
WHERE 
    (ALL_AGREEMENTS.ARRG_KEY=STIPULATION_PROVISIONS.ARRG_KEY(+) ) 
    AND (STIPULATION_PROVISIONS.STIP_TYPE_CODE=PROVISION_TYPES.STIP_TYPE_CODE(+) ) 
    AND (PROVISION_TYPES.STIP_CATG_CODE = 'PRV' ) 
    AND (GENERAL_REMARKS.GEN_RMK_FK(+)=STIPULATION_PROVISIONS.STIP_KEY AND GENERAL_REMARKS.RMK_TYPE_CATG(+) = 'PRV' ) 
    AND (GENERAL_REMARKS.RMK_KEY = GENERAL_REMARK_TEXT.RMK_KEY(+) ) 
    AND (GENERAL_REMARKS.RMK_TYPE_CATG (+) = 'PRV' ) 
    AND ((ALL_AGREEMENTS.ARRG_ORG_KEY IN 
    (SELECT ARRG_ORG_KEY 
    FROM BO_USER_DATA_PRIVS 
    WHERE OBJECT_TYPE_CD = 'area' 
    AND SEC_USER_ID = UPPER('user')) 
AND ALL_AGREEMENTS.SUBJ_CODE IN 
    (SELECT SUBJ_CODE 
    FROM BO_USER_DATA_PRIVS 
    WHERE OBJECT_TYPE_CD = 'SUBJ' 
    AND SEC_USER_ID = UPPER('user'))) ) 
    AND 
    (
    (
    ALL_AGREEMENTS.AGMT_NUM IN ('00003000','00004000','00005001','00005002','00005003','00006000','00007000','00008000','00009000','00010000','00021000','00022000','00023000','00024000','00025000','00026000') 
    ) 
    AND 
    PROVISION_TYPES.STIP_TYPE_DESC IN ('provision' ) 
    AND 
    STIPULATION_PROVISIONS.EXST_FLAG IN ('Y' ) 
) 
GROUP BY ALL_AGREEMENTS.AGMT_NUM 
+1

什麼是你的問題? –

+0

我不能完全弄清楚如何將listagg函數合併到我的select語句中以使其正確排序。 – user3111598

+0

[SQL Query連接來自Oracle中多行的列值]的可能重複(http://stackoverflow.com/questions/4686543/sql-query-to-concatenate-column-values-from-multiple-rows-in- oracle) –

回答

0

事情是這樣的:

SELECT 
    a.AGMT_NUM, 
    p.STIP_TYPE_DESC, 
    s.EXST_FLAG, 
    (SELECT LISTAGG(t.RMK_TEXT, CHR(13) || CHR(10)) 
      WITHIN GROUP (ORDER BY t.RMK_LINENO) 
    FROM GENERAL_REMARKS r 
      INNER JOIN GENERAL_REMARK_TEXT t 
      ON (r.RMK_KEY = t.RMK_KEY) 
    WHERE r.GEN_RMK_FK = s.STIP_KEY 
    AND r.RMK_TYPE_CATG = 'PRV' 
) AS Remarks 
FROM 
    ALL_AGREEMENTS a 
    LEFT OUTER JOIN STIPULATION_PROVISIONS s 
    ON (a.ARRG_KEY = s.ARRG_KEY) 
    LEFT OUTER JOIN STIPULATION_TYPES p 
    ON (s.STIP_TYPE_CODE = p.STIP_TYPE_CODE) 
WHERE 
    p.STIP_CATG_CODE = 'PRV' 
AND EXISTS (SELECT 1 
       FROM BO_USER_DATA_PRIVS b 
       WHERE OBJECT_TYPE_CD = 'LAND' 
       AND SEC_USER_ID = UPPER('user') 
       AND a.ARRG_ORG_KEY = b.ARRG_ORG_KEY 
      ) 
AND EXISTS (SELECT 1 
       FROM BO_USER_DATA_PRIVS b 
       WHERE OBJECT_TYPE_CD = 'SUBJ' 
       AND SEC_USER_ID = UPPER('user') 
       AND a.SUBJ_CODE = b.SUBJ_CODE 
      ) 
AND a.AGMT_NUM IN ('OH00003000','OH00004000','OH00005001','OH00005002','OH00005003','OH00006000','OH00007000','OH00008000','OH00009000','OH00010000','OH00021000','OH00022000','OH00023000','OH00024000','OH00025000','OH00026000') 
AND p.STIP_TYPE_DESC = 'provision' 
AND s.EXST_FLAG = 'Y'; 
+0

謝謝,這個工程。我會一直玩,直到我更好地理解一切。 – user3111598

+0

它利用[相關的子查詢](http://docs.oracle.com/cd/E11882_01/server.112/e26088/queries007.htm#SQLRF52357)(希望)可以簡化代碼。 – MT0