sql server 拼接多条记录的某一个字段,见下表,怎么做?

时间:2022-08-23 15:03:59
table1:
sessionID        message             createTime
     1                      hello                     2014/5/6
     1                      word                     2015/6/5
     1                      你好                       2015/7/4
     2                      hello                    同上时间
    2                       你好                       同上时间
     .                           .                                  .
.. .                            ...                                ...



要求输出:

     1                       helloword你好             2015/7/4
     2                       hello你好                         时间


求大神应该怎么写,可以用sql或者存储过程,要写循环。sessionID相同的记录,message要拼接起来,时间选最后一条。     

3 个解决方案

#1


参考MYSQL手册中的函数 group_concat 的介绍和例子。

#2



如果是sql server,可以这么写:

with table1(sessionID,message,createTime)
as
(
select     1                      ,'hello'                     ,'2014/5/6' union all
select      1                      ,'word'                     ,'2015/6/5' union all
select     1                      ,'你好'                       ,'2015/7/4' union all
select      2                      ,'hello'                    ,'同上时间' union all
select     2                       ,'你好'                       ,'同上时间'
)


select sessionID,
       replace(cast((select ','+message from table1 t2 
                 where t1.sessionID = t2.sessionID 
 for xml path('')) as varchar(100)),',','') as message,
   max(createtime) createtime
from table1 t1
group by sessionID
/*
sessionID message createtime
1 helloword你好 2015/7/4
2 hello你好 同上时间
*/

#3




SELECT  
sessionID, REPLACE( GROUP_CONCAT(message), ',', ' '),  createTime 
FROM table1 
GROUP BY sessionID

#1


参考MYSQL手册中的函数 group_concat 的介绍和例子。

#2



如果是sql server,可以这么写:

with table1(sessionID,message,createTime)
as
(
select     1                      ,'hello'                     ,'2014/5/6' union all
select      1                      ,'word'                     ,'2015/6/5' union all
select     1                      ,'你好'                       ,'2015/7/4' union all
select      2                      ,'hello'                    ,'同上时间' union all
select     2                       ,'你好'                       ,'同上时间'
)


select sessionID,
       replace(cast((select ','+message from table1 t2 
                 where t1.sessionID = t2.sessionID 
 for xml path('')) as varchar(100)),',','') as message,
   max(createtime) createtime
from table1 t1
group by sessionID
/*
sessionID message createtime
1 helloword你好 2015/7/4
2 hello你好 同上时间
*/

#3




SELECT  
sessionID, REPLACE( GROUP_CONCAT(message), ',', ' '),  createTime 
FROM table1 
GROUP BY sessionID