如何使用SQL Server检索类似Facebook的人?

cez*_*ann 5 sql-server

在我的应用程序中,我遇到了问题,以及面对它们的人员列表.今天我通过STUFF函数检索所有人的名字,如下面的示例:

select problem.*, 
(
    STUFF
    (
        (
            SELECT TOP(3)', ' + person.name
            FROM 
                problem_person
                LEFT JOIN person ON problem_person.personId = person.Id
            WHERE 
                problem_person.problemId = problem.Id
                order by person.name
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''
    )
) as peopleWhoFaced from problem
Run Code Online (Sandbox Code Playgroud)

然而,当很多人面临同样的问题时,peopleWhoFaced领域变得巨大.如何找回类似的东西Person 1, Person 2 and 36 more faced the problem?我知道我可以在API级别执行此操作,但我正在尝试避免这样做,并保持API代码清洁.

我怎么能做到这一点?我需要光标或类似的东西吗?

先感谢您.

Dan*_*eld 4

追加COUNT(*) - 3

DECLARE @count int = (SELECT COUNT(*) - 3 
                      FROM problem
                      LEFT JOIN person 
                      ON problem.problemId = person.problemId
                      INNER JOIN
                         problem_person
                      ON problem_person.personId = person.Id)


select problem.*, 
(
    STUFF
    (
        (
            SELECT TOP(3)', ' + person.name
            FROM 
                problem_person
                LEFT JOIN person ON problem_person.personId = person.Id
            WHERE 
                problem_person.problemId = problem.Id
                order by person.name
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''
    ) + CASE WHEN @count > 0 THEN N' and ' + CAST(@count as NVARCHAR(20)) + N' more faced the problem' ELSE N'' END
) as peopleWhoFaced from problem
Run Code Online (Sandbox Code Playgroud)