填充函数正在生成多行

时间:2014-07-30 09:58:38

标签: sql sql-server

这是一个很长的镜头,但我希望有人可以帮助我让这些东西起作用。我正在获取正确的数据,但它在多行上。我无法使用suff函数将DaysWithoutLogout放在一行上。

更新:好的,我已经简化了我的问题,但我并不真正理解STUFF功能。我在这个网站上看到过很多从一个表中选择而不是多个表的例子。我的选择仍然返回多行,而不是预期的两行。

Create table #DaysWithoutLoggout
(
    userid int,
    [days] nvarchar(max)

)

create table #user
(
    userid int,
    name nvarchar(100)
)

Insert into #user values('1', 'nick')
Insert into #user values('2', 'jon')

Insert into #DaysWithoutLoggout values('1', '13')
Insert into #DaysWithoutLoggout values('1', '15')
Insert into #DaysWithoutLoggout values('1', '24')
Insert into #DaysWithoutLoggout values('2', '10')
Insert into #DaysWithoutLoggout values('2', '3')

select us.name, alldays = 
STUFF((SELECT ', ' + b.[days]
           FROM #DaysWithoutLoggout b 
           inner join #user u
           on u.userid = b.userid
           WHERE b.[days] = a.[days]
           FOR XML PATH('')), 1, 2, '')
FROM #DaysWithoutLoggout a
inner join #user us
           on us.userid = a.userid
GROUP BY us.name, a.[days]

1 个答案:

答案 0 :(得分:0)

根据您的示例表和数据,您应该能够使用以下查询将days连接在一起:

SELECT DISTINCT us.name,
  STUFF(
         (SELECT ', ' + d.days
          FROM DaysWithoutLoggout d
          WHERE d.userid = us.userid
          FOR XML PATH (''))
          , 1, 1, '')  AS days
FROM [user] us;

请参阅SQL Fiddle with Demo