2017-06-02 1 views
0

J'essaie de comprendre comment afficher les TYPES de commandes que chaque client peut placer avec nous. Nous avons les tableaux suivants CLIENTS, CLIENT_SERVICE_TYPE, SERVICE_TYPES, PRODUCT_TYPESQL - résumer tous les types de produits à partir d'une liste de autorisé

Nous avons de nombreux types de services qui peuvent être facilement associés aux fruits et légumes.

clients - Liste tous nos clients
CLIENT_SERVICE_TYPE - répertorie tous les types de services (pommes, poires, bananes, squash, poulet), ils sont autorisés à placer.
SERVICE_TYPES - liste les centaines et centaines de fruits et légumes que nous offrons (dont chaque client ne peut en commander que quelques-uns.)
PRODUCT_TYPE énumère les 5 catégories que nous offrons (IE Fruits, Légumes, Épices, Produits laitiers, Viandes)

Je veux être en mesure de créer un rapport de synthèse qui affichera certains clients comme cette

Nom de la société | Sales Rep | Types de produits
Société ABC | Jane Smith | Fruits
Société XYZ | Joe Aardvark | Légumes, fruits
Société 123 | Amy Addams | viande, légumes, fruits

Dans l'exemple ci-dessus, la société ABC a 15 Fruits autorisés (bananes, pommes, oranges, etc.), mais ses résumés comme 1 sur une ligne Fruits. La société XYZ a les mêmes 15 fruits autorisés et 1 carotte. Je veux qu'il se présente (commande n'a pas d'importance) comme Légumes, Fruits sur la même ligne. La société 123 n'est autorisée que pour 4 services (Poulet, Banane, Pois et Courge). Viande, légumes, fruits

Je sais que c'est probablement simple de trouver des tutoriels existants, mais ma terminologie n'est évidemment pas à la hauteur. C'est aussi loin que je l'ai eu et comme vous pouvez probablement le deviner, il montre plusieurs lignes pour le nombre X de types de services pour lesquels ils sont approuvés.

SELECT 
    company [Client Name] 
    ,salesperson [Sales Rep] 
    --,pt.productTypeName [List of approved Product Types] 
    FROM CLIENT cl (NOLOCK) 
     LEFT JOIN 
    CLIENT_SERVICE_TYPE cst (NOLOCK) = cl.client_key = cst.client_key 
     LEFT JOIN 
    SERVICE_TYPE st (NOLOCK) = cst.service_key = st.service_key 
     LEFT JOIN 
    PRODUCT_TYPE pt (NOLOCK) = cst.productTypeId = pt.productTypeId 
WHERE cl.client_program_id in (1,2,3) 
    and status = 160 
ORDER BY company 
+0

Avez-vous essayé 'GROUP BY'? Et si vous avez besoin de plusieurs valeurs de ligne dans une seule colonne, vous aurez probablement besoin d'un sous-requête ou d'un sous-requête. –

+0

J'ai essayé le Group By et cela semble faire partie de ce que je veux accomplir mais pas tous. dans mon exemple ci-dessus, les résultats ressemblent à ceci Société XYZ | Joe Aardvark | ** Légumes ** Société XYZ | Joe Aardvark | ** Fruits ** – dplres81715

+0

J'ai trouvé un [lien prometteur] (https://stackoverflow.com/questions/6899/how-to-create-a-sql-server-function-to-join-multiple-rows-from- a-subquery-into) où je peux combiner les données en une seule valeur en utilisant un GROUP BY à la fin. Il ne fait pas tout à fait 100% de ce que je voulais faire mais sacrément si ce n'est pas assez proche – dplres81715

Répondre

0

J'ai trouvé la réponse par un essai et une erreur. Dans une instruction SELECT, voici comment je l'ai fait

SELECT 
company as [Company Name] 
,salesperson as [Sales Rep] 
,(STUFF((SELECT CAST(', ' + productTypeName AS VARCHAR(MAX)) 
    FROM CLIENT_SERVICE_TYPE cst 
     LEFT JOIN 
    SERVICE_TYPE st on cst.service_type_key = st.service_type_key 
     LEFT JOIN 
    PRODUCT_TYPE pt on st.product_type_key = pt.product_type_key 
    WHERE c.client_key = cst.client_key 
    GROUP BY pt.product_type_name 
    FOR XML PATH ('')),1,2, '')) [Product Types] 
FROM CLIENT c 

La fin résulte
Nom de la société | Représentant des ventes | Types de produits
Société ABC | Jane Smith | Fruits
Société XYZ | Joe Aardvark | Légumes, fruits
Société 123 | Amy Addams | Viande, légumes, fruits