2013-10-25 128 views
2

我有一個SQL Server 2005的表記錄了過程的每個步驟如下圖所示SQL 2005將多個記錄到一個

時間 名稱

08.40  薩拉
09.00   Nafira
09.00   Sarah
09.00   Denur
10.00   MuLyono
10.00  幸運
08.30  瑪拉
08.35  馬拉

我想這樣做是顯示對每一個顯示爲每個事件的時間的ResourceID一行的結果。

時間 名稱

08.30  瑪拉
08.35  馬拉
08.40  薩拉
09.00   Nafira,薩拉,Denur
10.00   MuLyono,幸運

任何建議如何實現這一目標?感謝閱讀和回答^ _^

+0

我認爲[這可以幫助](http://stackoverflow.com/questions/451415/simulating -group-concat-mysql-function-in-microsoft-sql-server-2005) – valex

回答

2

試試這個。我已經測試過它,它正在工作。

SELECT t.Time, LEFT(Names , LEN(Names)-1) as Names 
FROM yourtable t 
CROSS APPLY 
(
    SELECT t1.Name + ',' 
    FROM yourtable t1 
    WHERE t.Time= t1.Time 
    FOR XML PATH('') 
) pre_trimmed (Names) 
GROUP BY Time, Names; 

正如你所看到的,琴絃從NAME列使用CROSS APPLY做加盟。所述http://technet.microsoft.com定義「應用」作爲

APPLY運算符允許你調用一個表值函數用於通過查詢外部表表達式返回的每一行。表值函數充當正確的輸入,而外部表格表達式充當左邊的輸入。對於左輸入的每一行評估正確的輸入,並將生成的行組合爲最終輸出。 APPLY運算符生成的列列表是左輸入中的一組列,後跟右輸入返回的列列表。

雖然「CROSS APPLY」爲,

CROSS從產生從表值函數的結果集的外部表APPLY僅返回行。

LEFT(Names , LEN(Names)-1)只是將結果字符串修剪一個字符,即在最後刪除額外的逗號。

0

我修改你的sql代碼就像這樣,這是像我想要的工作。

選擇c1.Time,
東西((選擇不同 '' +鑄造(NAMA爲varchar(200))
從tbclientdata C2其中c2.time = c1.time
用於XML路徑( '')),1,1, '')
從tbclientdata C1
組由c1.Time

+0

然後將你的答案標記爲'回答'。它會幫助別人。 – P5Coder