2016-01-29 3 views
5

Hier in meiner App habe ich Probleme, und eine Liste von Menschen, die sie konfrontiert. Heute bin ich das Abrufen alle Menschen Namen durch STUFF Funktion wie die Probe unter:Wie Facebook-like People Zähler mit SQL Server abrufen?

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 

Wenn jedoch eine Menge Leute vor dem gleichen Problem, peopleWhoFaced Feld riesig wird. Wie kann man etwas wie Person 1, Person 2 and 36 more faced the problem abrufen? Ich weiß, dass ich dies auf API-Ebene tun könnte, aber ich versuche, dies zu vermeiden und API-Code sauber zu halten.

Wie konnte ich das erreichen? Brauche ich einen Cursor oder etwas ähnliches?

Vielen Dank im Voraus. COUNT(*) - 3

Antwort

4

anhängen:

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 
+0

Vielen Dank für die Antwort Dan! Ich werde das überprüfen! –

+0

Die Antwort ist nicht korrekt, aber es zeigte mir die richtige Richtung. Es ist nicht ganz korrekt, weil '@ count' immer die gleiche Personenmenge (in meinem Fall 144 Personen) zurückgibt, selbst wenn nur 4 das Problem (korrekter Wert) hatten. –

+0

Ich sehe, was Sie sagen - aktualisierte Antwort, um die richtige Tabelle/Bedingungen zu enthalten. –

Verwandte Themen