2012-09-20 44 views
3

我有多個客戶端,每個客戶端有67個記錄。將數據轉換爲多列

該記錄包含活動,日期,ID,標誌和許多其他列。

我希望活動名稱是這些活動標題下的標題和日期。

我想用下面的表格來解釋它。這是當前輸出:

Client Activity Date 
1  A   21/15 
1  B   5/5/2012 
1  C   51/3115 
1  D   54/6/84 
2  A   8/6/99 
2  B   1/1/2011 
2  C   8/4 
2  D   9/81/1 
3  A   6/51/8 
3  B   1/61/8 
3  C   1/31 
3  D   3/2/1 

而且我想它是:

Client  A  B   C   D 
1   21/15 5/5/2012 51/31/15 54/6/84 
2   8/6/99 1/1/2011 8/4  9/81/1 
3   6/51/8 1/61/8 1/31  3/2/1 
+0

的可能重複[獲取行作爲柱(SQL Server的動態PIVOT查詢)](http://stackoverflow.com/questions/12074939/get-rows-as-columns-sql- server-dynamic-pivot-query) – RichardTheKiwi

回答

4

您將要使用的PIVOT功能這一點。如果您知道列數轉換,那麼你可以通過一個靜態支點硬編碼:

select * 
from 
(
    select client, activity, dt 
    from yourtable 
) x 
pivot 
(
    max(dt) 
    for activity in ([A], [B], [C], [D]) 
) p 

看到SQL Fiddle with Demo

如果列數不詳,然後使用動態版本:

​​

看到SQL Fiddle with Demo

最後,這也可以用CASE語句和聚合函數進行(見SQL Fiddle with Demo):

select client, 
    max(case when activity = 'A' then dt end) as A, 
    max(case when activity = 'B' then dt end) as B, 
    max(case when activity = 'C' then dt end) as C, 
    max(case when activity = 'D' then dt end) as D 
from yourtable 
group by client 
+0

謝謝你的工作! –

+0

感謝您的第二個選擇。巨大的幫助。 – dbinott