2009-05-29 7 views
1

Une catégorie peut avoir plusieurs produits. Je dois construire StoredProcedure qui renvoie toutes les catégories avec des données de produits combinés en un seul champ:Combiner les champs des tables jointes

 
SP Result: 
idCategory Name ProductNames   ProductQuantities 
1   Cat1 Procut1,Product2  24,32 
2   Cat2 ProductX,ProductY 0,61 

ProductNames et ProductQuantities sont des champs VARCHAR combinés (concaténer) les valeurs des champs de tables jointes de produits. Voilà ce que j'ai dans DB:

 
Category table: 
idCategory Name 
1   Cat1 
2   Cat2 

Product table: 
idProduct idCategory Name  Quantity 
1   1   Product1 24 
2   1   Product2 32 
3   2   ProductX 0 
4   2   ProductY 61 

Je voudrais aussi avoir une fonction, qui retourne "Product1, Product2" pour le paramètre d'entrée idCategory = 1, comme ceci:

 
SELECT idCategory, 
     dbo.NamesFn(idCategory) AS ProductNames, 
     dbo.QuantitiesFn(idCategory) AS ProductQuantities 
FROM Category 

peut-être une fonction cela renvoie le résultat de la table, donc rejoindre ne serait fait qu'une seule fois, pas dans chaque Fn (parce que c'est un exemple simplifié, dans l'application réelle, je dois avoir 4-5 champs combinés, ou même plus dans le futur)?

Comment écrire cela SQL/SP & Fn? J'utilise MS SQL2005

Répondre

2

Il existe plusieurs solutions pour concaténer des lignes à l'aide de SQL Server. Voir this et this.

Cette requête produit le jeu de résultats que vous avez demandé:

select c.idCategory, c.Name, 
    replace(
     (select p.Name as [data()] 
     from Product p 
    where p.idCategory = c.idCategory 
    for xml path ('') 
), ' ', ', ') as ProductNames, 
    replace(
     (select p.Quantity as [data()] 
     from Product p 
    where p.idCategory = c.idCategory 
    for xml path ('') 
), ' ', ', ') as ProductQuantities 
from Category c 

Edité pour ajouter: Cette requête produit le résultat:

idCategory Name ProductNames   ProductQuantities 
1   Cat1 Product1, Product2 24, 32 
2   Cat2 ProductX, ProductY 0, 61 
+0

je l'ai déjà trouvé ces exemples par Google, mais ne le font pas savoir avoir à construire Fonction qui retourne le résultat de la table, et comment inclure ces résultats aux résultats SP –

+0

Un des liens inclut le code pour une telle fonction ... –

+0

@Tom H mais pas pour la fonction avec le résultat du tableau –

Questions connexes