2012-12-13 57 views
3

我選擇通過示例來問這個問題,因爲我認爲它最清楚地說明了我正在嘗試執行的操作。通過分區合併列中的值

說我有如下表:

member number time 
------ ----- ----- 
    1  2  19:21 
    1  4  19:24 
    1  27  19:37 
    2  4  19:01 
    2  7  21:56 
    2  8  22:00 
    2  21 22:01 

我怎樣才能獲得以下列?

member number new column 
------ ----- --------- 
    1  2  2.4.27 
    1  4  2.4.27 
    1  27  2.4.27 
    2  4  4.7.8.21 
    2  7  4.7.8.21 
    2  8  4.7.8.21 
    2  21  4.7.8.21 

EDIT(S):

我使用DB2 SQL。

每個成員的行數不一定相同。

訂單由時間決定。

+2

您使用的是什麼RDMS? Oracle,SQL Server,....? –

+0

所有成員都有三部分嗎?連接時如何確定三個數字的順序? –

回答

0

我知道這是不好的形式回答你自己的問題,但我發現這個有用的頁面:

https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/aggregating_strings42?lang=en

修改代碼中有給出:

create table test (member int, number int, time_stamp time)`; 

insert into test values 
(1,2,'19:21'), 
(1,4,'19:24'), 
(1,27,'19:37'), 
(2,4,'19:01'), 
(2,7,'21:56'), 
(2,8,'22:00'), 
(2,21,'22:01'); 

select 
    member, substr(xmlcast(xmlgroup('.' || number as a order by time_stamp) as varchar(60)), 2) 
from test 
group by member 
+0

完全可以回答你自己的任務。您也可以接受它,表明問題已解決。 –

+0

接受我自己作爲我使用的db2版本似乎沒有listagg建議nullrevolution – user1873334

0

在Oracle中,這將做的工作,

select a.member,a.number,b.newcol from table a,(select member,replace(wm_concat(number),',','.') newcol from test11 group by member)b where a.member=b.member; 
1

取決於您使用的DB2版本中,LISTAGG()功能可以提供給您。我認爲它包含在9.7之後的任何db2版本中。

例如:

select 
    member, 
    number, 
    listagg(number,',') as new_column 
from 
    tablename 
group by 
    member