当前位置: 代码迷 >> Sql Server >> 行数据集中显示在一列中,该怎么实现
  详细解决方案

行数据集中显示在一列中,该怎么实现

热度:14   发布时间:2016-04-24 10:30:27.0
行数据集中显示在一列中,该如何实现

  create table meeting(
  id int identity(1,1) ,
  meetinguser nvarchar(100)
  ) 
  create table userinfo(
  id int identity(1,1) ,
  username nvarchar(100)
  )
  insert into userinfo values('王尼玛');
  insert into userinfo values('小尼玛');
  insert into userinfo values('撸尼玛');
  insert into userinfo values('尼美');
  insert into meeting values('1,2,3,4'); 

meeting 表中的数据:
id                   meetinguser
1                     1,2,3,4

想查询出来的效果是:
id                   meetinguser            username
1                     1,2,3,4                      王尼玛,小尼玛,撸尼玛

这样的查询效果能实现么?
木有思路呢
------解决方案--------------------
-----------两表没关系的-----------------
SELECT A.*
,(SELECT username=stuff((SELECT ','+username FROM userinfo FOR XML PATH('')),1,1,'')) AS username
FROM meeting AS a

----------两表有关系的------------------
SELECT * 
,(SELECT STUFF((SELECT ','+username
FROM userinfo AS A
JOIN (
SELECT
???? CAST(SUBSTRING(meetinguser,number,CHARINDEX(',',meetinguser+',',number)-number)AS?INT?)?AS?meetinguserID?
FROM
???? meeting?a,master..spt_values?
WHERE
???? number?>=1?and?number<=LEN(meetinguser)??
???? and?type='p'?
???? and?SUBSTRING(','+meetinguser,number,1)=','
And a.id=t.id
) AS B ON A.id=B.meetinguserID
FOR XML PATH('')),1,1,'')) AS username
FROM meeting AS t



------解决方案--------------------

with t as
(select a.id,a.meetinguser,c.username 
 from meeting a
 inner join master.dbo.spt_values b
  on b.[type]='P' and b.number between 1 and len(a.meetinguser)
  and substring(','+a.meetinguser,b.number,1)=','
 inner join userinfo c 
  on substring(a.meetinguser,b.number,charindex(',',a.meetinguser+',',b.number)-b.number)
     =rtrim(c.id))
select a.id,a.meetinguser,
       stuff((select ','+b.username
              from t b 
              where b.id=a.id and b.meetinguser=a.meetinguser
              for xml path('')),1,1,'') 'username'
 from t a
 group by a.id,a.meetinguser

/*
id          meetinguser          username
----------- -------------------- ---------------------------
1           1,2,3,4              王尼玛,小尼玛,撸尼玛,尼美

(1 row(s) affected)
*/
  相关解决方案