2011-03-17 74 views
0

我想將多條記錄中的數據合併到一條記錄中。 從Oracle7:合併數據在多條記錄中與一條記錄相同

 FO     LINE FLOOR COLOR SUM 
    S4714EH02    EH 11F   AK 9 
    S4714EH02    EH 11F   AK 18 
    S4714EH02    EH 11F   FE 9 
    S4714EH02    EH 11F   FE 18 
    S4714EH02    EH 12F   AK 9 
    S4714EH02    EH 12F   AK 18 
    S4714EH02    EH 12F   FE 9 
    S4714EH02    EH 12F   FE 18 

FO     LINE FLOOR  COLOR SUM 
    S4714EH02    EH 11F   AK 9,18 
    S4714EH02    EH 11F   FE 9,18 
    S4714EH02    EH 12F   AK 9,18 
    S4714EH02    EH 12F   FE 9,18 

我知道它可以在SQL Server 2008,但我不知道它可以Oracle7中做出。 請幫幫我。謝謝。

+3

Oracle 7?真的沒辦法升級? – Thilo 2011-03-17 06:13:27

回答

2

Oracle 7是該數據庫的良好版本。它引入了許多新功能,表現良好,顯然它仍然非常穩定。但是它在這個問題上長期存在,並且在更新版本的產品中缺乏許多可用的功能。例如,我們可以用來將值聚合到一個列表中的所有常規技術僅適用於9i或更高版本。 (有些人可能在工作8I,我心裏是有點模糊這裏,因爲它是近十年,因爲我與Oracle舊工作)

所以請您在Oracle 7的任何選項?我能想到的唯一方法就是將存儲過程作爲報告預處理的一部分運行。該存儲過程將環繞要查詢的行,組裝與所需輸出匹配的行,然後將它們插入到不同的表中。該表然後將服務於實際的查詢。

這是一個非常笨拙的解決辦法,並在您的情況可能並不可行。但是,這是使用傳統軟件的成本。

3

前面已經有出色的APC說,這個版本是真的老了,缺乏各種功能做字符串聚集。我曾在以前的千禧年7版本雖然工作了,我想下一個序列應該在Oracle7的工作。我可能是錯的,但顯然我無法檢查它。

SQL> create table t (fo,line,floor,color,sum) 
    2 as 
    3 select 'S4714EH02', 'EH', '11F', 'AK', 9 from dual union all 
    4 select 'S4714EH02', 'EH', '11F', 'AK', 18 from dual union all 
    5 select 'S4714EH02', 'EH', '11F', 'FE', 9 from dual union all 
    6 select 'S4714EH02', 'EH', '11F', 'FE', 18 from dual union all 
    7 select 'S4714EH02', 'EH', '12F', 'AK', 9 from dual union all 
    8 select 'S4714EH02', 'EH', '12F', 'AK', 18 from dual union all 
    9 select 'S4714EH02', 'EH', '12F', 'FE', 9 from dual union all 
10 select 'S4714EH02', 'EH', '12F', 'FE', 18 from dual 
11/

Table created. 

SQL> create function f 
    2 (p_fo in t.fo%type 
    3 , p_line in t.line%type 
    4 , p_floor in t.floor%type 
    5 , p_color in t.color%type 
    6 ) return varchar2 
    7 is 
    8 cursor c 
    9 is 
10 select t.sum 
11  from t 
12  where t.fo = p_fo 
13  and t.line = p_line 
14  and t.floor = p_floor 
15  and t.color = p_color 
16  order by t.sum 
17 ; 
18 l_concatenated_sum varchar2(2000); 
19 begin 
20 for r in c 
21 loop 
22  l_concatenated_sum := l_concatenated_sum || ',' || to_char(r.sum); 
23 end loop; 
24 return substr(l_concatenated_sum,2); 
25 end f; 
26/

Function created. 

SQL> select fo 
    2  , line 
    3  , floor 
    4  , color 
    5  , f(fo,line,floor,color) sum 
    6 from t 
    7 group by fo 
    8  , line 
    9  , floor 
10  , color 
11/

FO  LI FLO CO SUM 
--------- -- --- -- -------------------- 
S4714EH02 EH 11F AK 9,18 
S4714EH02 EH 11F FE 9,18 
S4714EH02 EH 12F AK 9,18 
S4714EH02 EH 12F FE 9,18 

4 rows selected. 

問候,
羅布。

+0

+1我忘了,我們可以從SQL調用存儲功能的Oracle 7的確是一個老闆的釋放! – APC 2011-03-17 12:43:25

0

在特殊情況下,你必須每個不同的鍵只有兩個記錄 - 如通過您的樣本數據 - 你可以這樣做:

SELECT fo, line, floor, color, MIN(sum) || ',' || MAX(sum) 
    FROM theTable 
    GROUP BY fo, line, floor, color; 

但是,這也不能一概而論處理超過每個密鑰有兩個值sum

相關問題