日期:2014-05-17  浏览次数:20563 次

sql行转列 有两行一样的列想用逗号分割在一行显示
例如是这样的,fieldtype:1代表座机 2代表手机
姓名    field       fieldtype
李     01058210000     1
王     13512555685     2
李     01052810001     1

想出来这样的效果
姓名       座机                           手机
李       01058210000,01052810001
王                                      13512555685

我现在能出来这样的效果
姓名       座机                           手机
李       01058210000
王                                      13512555685

请问可以实现吗?以下是我的代码

select a.seqno,a.compid,a.name,
max(case b.fieldtype when 1 then field else '''+@blank+''' end) 座机,
max(case b.fieldtype when 2 then field else '''+@blank+''' end) 手机
from table1 a
group by a.name,a.seqno,a.compid

------最佳解决方案--------------------
引用:
姓名 ........ 座机 ....................................................... 手机
李......01058210000,01052810001
王 .....................................................................135125556……

哦,看错了


with tb(姓名,field,fieldtype)
as(
select '李','01058210000',1 union all
select '王','13512555685',2 union all
select '李','01052810001',1)
select 姓名,stuff((select ','+field from tb tb2 where fieldtype=1 and tb2.姓名=tb1.姓名 for xml path('')),1,1,'') 座机,
stuff((select ','+field from tb tb2 where fieldtype=2 and tb2.姓名=tb1.姓名 for xml path('')),1,1,'') 手机 from tb tb1 group by tb1.姓名



------其他解决方案--------------------

CREATE table #TEMP
(
NAME VARCHAR(10),
TEL VARCHAR(20),
type   char(1) 
)
insert into #TEMP
SELECT '李', '01058210000', '1' UNION
SELECT '王', '13512555685', '2' UNION
SELECT '李', '01052810001', '1'


--select*fromtb pivot(max(分数)for课程in(语文,数学,物理))a
select NAME , a.[1] as 座机,a.[2] as 手机 from
(
select * from #TEMP
pivot (Max(tel) for [type] in([1],[2])) pvt)a
------其他解决方案--------------------
--use StudentNew
----使用for xml path 
----下边的sql语句可以将属于同组的多行的数据变成一个数据
----结果演示
----CityName 用户名
----北京 b,d
----上海 a,c,e
----create @T1 table