Sql server 基于公司ID的逗号分隔名称

Sql server 基于公司ID的逗号分隔名称,sql-server,sql-server-2008,sql-server-2008-r2,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2008 R2,Sql Server 2012,我有下表的员工详细信息 EmployeeName CompayId CompanyLastActive --------------------------------------------------------- robort 112 10 Jun 2015 09:30 john 113 11 Jun 2015 11:10 sunny 114 14 Jun 2015 16:10

我有下表的员工详细信息

EmployeeName   CompayId    CompanyLastActive
---------------------------------------------------------
robort          112        10 Jun 2015 09:30 
john            113        11 Jun 2015 11:10
sunny           114        14 Jun 2015 16:10
sumanth         114        15 Jun 2015 18:11
usha            115        07 Jun 2015 13:14
sudheer         115        14 Jun 2015 17:10
sweety          115        08 Jun 2015 16:34
我需要根据CompanyID和逗号分隔的EmployeeName获取最新的员工活动时间,如下所示

EmployeeName           CompayId        CompanyLastActive
---------------------------------------------------------
robort                 112               10 Jun 2015 09:30 
john                   113               11 Jun 2015 11:10
sunny, sumanth         114               15 Jun 2015 18:11        
usha, sudheer, sweety   115               14 Jun 2015 17:10

请帮助我如何解决。

请检查此项,我没有检查此项,因为我感觉懒于构建模式,它可能会错误地抛出组,您可以处理它

SELECT 
  Results.CompayId,
  STUFF((
    SELECT ', ' + CAST(EmployeeName AS VARCHAR(MAX)) 
    FROM YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
  ,1,2,'') AS NameValues
  ,max(Results.CompanyLastActive) as CompanyLastActive
FROM YourTable Results
GROUP BY CompayId
结果:

EmployeeName        CompayId    CompanyLastActive
-------------------------------------------------------
robort              112         June, 10 2015 09:30:00
john                113         June, 11 2015 11:10:00
sunny,sumanth       114         June, 15 2015 18:11:00
usha,sudheer,sweety 115         June, 14 2015 17:10:00

示例结果。

您可以使用此查询:

SELECT EmployeeNames = dbo.EmployeeNamesPerCompany(CompanyID,', '), 
       CompanyID, 
       CompanyLastActive = MAX(CompanyLastActive)
FROM Employee e
GROUP BY CompanyID
ORDER BY MAX(CompanyLastActive)
如果您创建了如下标量值函数:

CREATE FUNCTION [dbo].[EmployeeNamesPerCompany]
(
    @companyID Int,
    @delimiter varchar(5)
)
RETURNS VARCHAR(8000)
AS
BEGIN
    DECLARE @Names VARCHAR(8000) 
    SELECT   @Names = COALESCE(@Names + @delimiter, '') + e.EmployeeName
    FROM    Employee e
    WHERE e.CompanyId = @companyID
    ORDER BY e.EmployeeName
    return @Names
END

你在使用所有3个版本的sql server吗?@ZoharPeled:我也在那个房间里。这个问题和那个问题有点不同。这里OP希望在一行中有不同的记录,而在那个问题中,OP试图在一行中获得多个列(不包括NULL)。
CREATE FUNCTION [dbo].[EmployeeNamesPerCompany]
(
    @companyID Int,
    @delimiter varchar(5)
)
RETURNS VARCHAR(8000)
AS
BEGIN
    DECLARE @Names VARCHAR(8000) 
    SELECT   @Names = COALESCE(@Names + @delimiter, '') + e.EmployeeName
    FROM    Employee e
    WHERE e.CompanyId = @companyID
    ORDER BY e.EmployeeName
    return @Names
END