2010-12-10 7 views
1

J'essaie de trouver des informations relatives à partir d'une table et de renvoyer ces résultats (ainsi que d'autres résultats non liés) dans une ligne dans le cadre d'une requête plus importante.Renvoyer plusieurs valeurs dans une colonne dans une requête principale

J'ai déjà essayé d'utiliser cet exemple, modifié pour mes données.
How to return multiple values in one column (T-SQL)?
Mais je ne peux pas le faire fonctionner. Il ne tirera aucune donnée (je suis sûr que c'est l'erreur de l'utilisateur [me]).

Si j'interroge la table directement à l'aide d'un TempTable, je peux obtenir les résultats correctement.

DECLARE @res NVARCHAR(100) 
SET @res = '' 
CREATE TABLE #tempResult (item nvarchar(100)) 
INSERT INTO #tempResult 
SELECT Relation AS item 
FROM tblNextOfKin 
WHERE ID ='xxx' AND Address ='yyy' 
ORDER BY Relation 
SELECT @res = @res + item + ', ' from #tempResult 
SELECT substring(@res,1,len(@res)-1) as Result 
DROP TABLE #tempResult 

Notez la ligne WHERE ci-dessus, xxx et yyy varierait en fonction des critères d'entrée pour la fonction. mais puisque vous ne pouvez pas utiliser TempTables dans une fonction ... Je suis coincé.

Les champs pertinents dans le tableau que j'essaie d'interroger sont les suivants.
tblNextOfKin
ID - varchar (12) Nom
- varchar (60)
Relation - varchar (30)
Adresse - varchar (100)

J'espère que cela a un sens assez ... J'ai vu sur un autre post une expression qui correspond.
Mon SQL-fu n'est pas si bon. Une fois que j'obtiens une fonction de travail, je vais la placer dans la requête principale pour le paquet SSIS sur lequel je travaille et qui tire des données de beaucoup d'autres tables.

Je peux fournir plus de détails si nécessaire, mais le site dit de rester simple, et j'ai essayé de le faire.

Merci !!!

Suivi (parce que lorsque j'ai ajouté un commentaire à la réponse ci-dessous, je n'ai pas pu modifier la mise en forme)
Je dois pouvoir obtenir des résultats de différentes colonnes.
ID Nom Relation Adresse
1, Mike, SON, 100 Main St.
1, Sara, DAU, 100 Main St.
2, Tim, SON, 123 South St.
deux les deux premières personnes vivent à la même adresse, donc si je demande ID = '1' et Address = '100 Main St.' J'ai besoin que les résultats ressemblent à quelque chose comme ...
"DAU, SON"

Répondre

0

Mysql a GROUP_CONCAT

SELECT GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item 
FROM tblNextOfKin 
WHERE ID ='xxx' AND Address ='yyy' 

Vous pouvez le faire pour toute la table avec

SELECT ID, Address, GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item 
FROM tblNextOfKin 
GROUP BY ID, Address 

(ID en supposant est pas unique)

Note: ceci est généralement une mauvaise pratique en tant qu'étape intermédiaire, ceci n'est acceptable que comme formatage final pour la présentation (sinon vous finirez par ungroupi ng ce qui sera la douleur)

+0

On dirait que cela fonctionnerait, mais pour le meilleur ou le pire que nous utilisons Microsoft SQL. Merci pour votre réponse. – Scottster

+0

ah, désolé .. j'ai lu mon SQL fu et lu comme mysql fu: D – Unreason

0

Je pense que vous avez besoin de quelque chose comme ceci (SQL Server):

SELECT stuff((select ',' +Relation 
    FROM tblNextOfKin a 
    WHERE ID ='xxx' AND Address ='yyy' 
    ORDER BY Relation 
    FOR XML path('')),1,1,'') AS res; 
+0

Je ne pense pas que cela fonctionnera pour mes besoins. – Scottster

+0

Je ne pense pas que cela fonctionnera pour mes besoins. Lorsque je recherche la syntaxe pour STUFF, il affiche "STUFF (expression_caractère, début, longueur, expression_caractère)" Où expression_caractere est une chaîne et la seconde expression_caractère est insérée dans la première chaîne à l'emplacement "début". Je dois pouvoir obtenir des résultats de différentes colonnes. ID Nom Relation Adresse 1, MIKE, SON, 100 rue principale 1, Sara, DAU, 100 rue principale 2, TIM, SON, 123 South St Les deux premières personnes vivent à la même adresse, donc J'ai besoin des résultats pour quelque chose comme ... "1 DAU, SON" – Scottster

Questions connexes