Renvoyer le jeu de données multi-lignes sous forme de CSV à une seule ligne sans table temporaire

Je fais des rapports contre une database idiote et je dois faire

SELECT [DESC] as 'Description' FROM dbo.tbl_custom_code_10 a INNER JOIN dbo.Respondent b ON CHARINDEX(',' + a.code + ',', ',' + b.CC10) > 0 WHERE recordid = 116 

Qui renvoie des lignes multiples

  Palm Compaq Blackberry 

Modifier * Le schéma est

 Respondent Table (At a Glance) ... *recordid lname fname address CC10 CC11 CC12 CC13* 116 Smith John Street 1,4,5, 1,3,4, 1,2,3, NULL Tbl_Custom_Code10 *code desc* 0 None 1 Palm 10 Samsung 11 Treo 12 HTC 13 Nokia 14 LG 15 HP 16 Dash 

Le jeu de résultats sera toujours 1 rangée, donc John Smith: | 646-465-4566 | A un BlackBerry, Palm, Compaq | Aime: Promenades sur la plage, Rainbows, Saxophone

Cependant, je dois être capable de l'utiliser dans une autre requête … comme

 Select b.Name, c.Number, d.MulitLineCrap FROM Tables 

Comment puis-je m'y prendre, merci d'avance …

BTW je pourrais aussi le faire dans LINQ si n'importe quel corps avait des idées …

Voici une façon de créer une list séparée par des virgules basée sur une requête (remplacez simplement la requête dans le premier bloc WITH). Maintenant, comment cela rejoint votre requête contre b et c, je n'en ai aucune idée. Vous devrez fournir une question plus complète – y compris les détails sur le nombre de lignes revenant de la deuxième requête et si "MultilineCrap" est le même pour chacune de ces lignes ou si elle dépend des données en b / c.

 ;WITH x([DESC]) AS ( SELECT 'Palm' UNION ALL SELECT 'Compaq' UNION ALL SELECT 'Blackberry' ), y([DESC]) AS ( SELECT ',' + [DESC] FROM x FOR XML PATH('') ) SELECT MultilineCrap = STUFF([DESC], 1, 1, '') FROM y; 

MODIFIER

Compte tenu des nouvelles exigences, c'est peut-être la meilleure façon:

 CREATE FUNCTION dbo.GetMultiLineCrap ( @s VARCHAR(MAX) ) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @x VARCHAR(MAX) = ''; SELECT @x += ',' + [desc] FROM dbo.tbl_custom_code_10 WHERE ',' + @s LIKE '%,' + RTRIM(code) + ',%'; RETURN (SELECT STUFF(@x, 1, 1, '')); END GO SELECT r.LName, r.FName, MultilineCrap = dbo.GetMultiLineCrap(r.CC10) FROM dbo.Respondent AS r WHERE recordid = 116; 

S'il vous plaît utiliser des alias qui ont un peu de sens, au lieu de simplement appliquer en série a , b ,c , etc. Vos requêtes seront plus faciles à lire, je le promets.