2009-10-27 6 views
0

J'ai une table A qui a une colonne C et une table de recherche (recherche) qui fournit une description avec un ID. Voici la configuration:Chaîne de retour de description chaîne d'ID donnée (séparée par des virgules)

table A with column C values: 

1,2,3 
2,3,4 

table lookup: 
1, 'This' 
2, 'is' 
3, 'tricky' 
4, 'SQL' 

Fournir une instruction SQL (SQL Server 2005) qui renvoie les chaînes suivantes:

Input: 1,2,3 Output: 'This','Is','tricky' 
Input: 2,3,4 Output: 'Is','tricky','SQL' 

tournant essentiellement la chaîne d'ID (à partir d'une table d'entrée A) dans une chaîne des descriptions

Répondre

0

Les exemples fournis avec SQL Server 2005 comprennent une fonction CLR appelé split(). C'est la meilleure façon de séparer des listes séparées par des virgules comme celle-ci de loin. Supposons que vous ayez une table appelée inputs, avec une colonne appelée input.

J'ai oublié ce que les sorties particulières de dbo.Split() sont ... alors travaillez ici avec moi. Appelons les champs id et val, où id nous dit que l'entrée est dans la liste.

WITH 
separated AS (
    SELECT i.input, s.id, s.val 
    FROM 
     dbo.inputs AS i 
     CROSS APPLY 
     dbo.Split(i.input) AS s 
) 
, converted AS (
    SELECT s.input, s.id, m.string 
    FROM 
     separated AS s 
     JOIN 
     dbo.mapping AS m 
      ON m.number = CAST(s.val AS varchar(5)) 
) 
SELECT c.input, (SELECT string + ' ' FROM converted AS c2 WHERE c2.input = c.input ORDER BY id FOR XML PATH('')) AS converted_string 
FROM converted AS c 
GROUP BY c.input; 
Questions connexes