在 SQL Server 中:
create table my_table (Time date, Interaction varchar(50), CustomerId int);
insert into my_table values
(N'1/5/2015', 'Facebook', 1 ),
(N'1/12/2015', 'Mail' , 3 ),
(N'1/3/2015', 'Email' , 1 ),
(N'1/9/2015', 'Facebook', 1 ),
(N'1/17/2015', 'Mail', 4 ),
(N'1/1/2015', 'Mail', 1 );
使用STUFF 和XML Path,您可以轻松做到这一点:
SELECT q1.Customerid + ', '
+ replace(q1.Interaction, ',', ' > ')
+ ', ' + replace(q1.[Time], ',', ' > ') AS desired_output
FROM (
SELECT DISTINCT cast(t2.CustomerId AS VARCHAR(10)) AS CustomerId
,STUFF((
SELECT ',' + t1.Interaction
FROM my_table T1
WHERE T1.CustomerId = T2.CustomerId
ORDER BY t1.[time]
FOR XML PATH('')
), 1, 1, '') AS Interaction
,STUFF((
SELECT ',' + cast(t1.[Time] AS VARCHAR(255))
FROM my_table T1
WHERE T1.CustomerId = T2.CustomerId
ORDER BY t1.[time]
FOR XML PATH('')
), 1, 1, '') AS [Time]
FROM my_table T2
) q1;
结果:
+------------------------------------------------------------------------------------------+
| CustomerId, Interaction Path, Date Path |
+------------------------------------------------------------------------------------------+
| 1, Mail > Email > Facebook > Facebook, 2015-01-01 > 2015-01-03 > 2015-01-05 > 2015-01-09 |
| 3, Mail, 2015-01-12 |
| 4, Mail, 2015-01-17 |
+------------------------------------------------------------------------------------------+
SQL Fiddle Demo
注意:如果您需要与您的日期格式相同的日期,您只需将Time 字段转换为日期样式101。