2011-10-24 44 views
0

我有一些數據分佈在兩個表上。第二個表格將數據存儲在行號中。有沒有一種方法可以顯示一行而不是多行的行號?看截圖。 Line Numbers jumbled將行合併成一行 - oracle 10g

SELECT DISTINCT II.FC, 
      II.GN, 
      II.PB, 
      II.DTI, 
      TL.LINENUMBER, 
      TL.TEXTLINE 
FROM ( ABC.ITD ITD 
     INNER JOIN 
      ABC.TEXTLINE TEXTLINE 
     ON (ITD.DTI = TEXTLINE.TEXTID)) 
    INNER JOIN 
     ABC.II II 
    ON (II.ITEMID = ITD.ITEMID) 
WHERE (II.FC = 'J') AND (TEXTLINE.TEXTLINE IS NOT NULL) 
ORDER BY ITD.DTI ASC 
+0

你是不是想將列連接成單個字符串還是連接成一組列?你想讓你的實際結果看起來像什麼? –

+0

是的,我試圖將分佈在四行的文本行連接成一行。所以我的輸出應該是:LANSOPRAZOLE | PREVACID CAP 15 MG | 3674 |如果患者還在使用P&T 2011年2月,請勿使用亞胺甲吡咯嗎?:CLOPIDOGREL(PLAVIX) – Shaji

回答

1

你需要創建一個函數來查找並連接所有的文本行:

CREATE OR REPLACE FUNCTION FN_APPEND_TEXT(idText IN NUMBER) RETURN VARCHAR2 
IS 
    CURSOR crsText IS 
     SELECT TL.LINENUMBER, 
      TL.TEXTLINE 
     FROM ABC.TEXTLINE TL 
     WHERE TL.TEXTID = idText 
     AND TL.TEXTLINE IS NOT NULL 
     ORDER BY TL.LINENUMBER ASC; 

    strReturn VARCHAR2(4000); 
BEGIN 

    FOR recText IN crsText 
    LOOP 
     strReturn := strReturn || recText.TEXTLINE; 
    END LOOP; 

    RETURN strReturn; 

END FN_APPEND_TEXT; 

然後修改您的SQL調用的函數:

SELECT DISTINCT II.FC, 
     II.GN, 
     II.PB, 
     II.DTI, 
     FN_APPEND_TEXT(II.DTI) Instructions 
    FROM ABC.ITD II 
WHERE II.FC = 'J' 
ORDER BY II.DTI ASC; 
+0

謝謝!你的幫助是非常apprecaited。 – Shaji