在我的应用程序中,我遇到了问题,以及面对它们的人员列表.今天我通过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代码清洁.
我怎么能做到这一点?我需要光标或类似的东西吗?
先感谢您.
追加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)