Champs à récupérer
c.Name, cg.Name
Problème
Je souhaite afficher tous les clients appartenant à un groupe appelé "Ventes" et afficher la valeur "Ventes" dans cg.Name. Mais alors, tout client qui ne fait pas partie d'un groupe appelé "Ventes", affiche le nom du client, mais laisse le nom du groupe "vide".
Essayé
SELECT c.Name, cg.Name, [NotInGroup].group FROM Customer c LEFT JOIN CustomerGroup cg on cg.CustID= c.ID OUTER APPLY( SELECT c2.Name, cg2.Name as [group] FROM Customer c2 LEFT JOIN CustomerGroup cg2 on cg2.CustID= c2.ID WHERE cg1.Name != 'Sales' ) as [NotInGroup] WHERE cg.Name = 'Sales'
Résultat souhaité
Merci d'avance.
4 Réponses :
SELECT c.Name, CASE WHEN cg.Name ='Sales' the 'Sales' else '' end FROM Customer c LEFT JOIN CustomerGroup cg on cg.ID = c.ID
Une méthode utilise une jointure gauche :
SELECT c.Name, cg.Name,
FROM Customer c LEFT JOIN
CustomerGroups cg
ON cg.custid = c.id AND
cg.Name = 'Sales';
Notez que le filtrage sur Ventes va dans le ON code> clause. Ceci est important, à moins que vous ne souhaitiez une ligne distincte pour chaque client et chaque groupe auquel appartient le client.
Notez également les conditions de participation.
A travaillé comme un charme. Solution simple mais n'y pensait tout simplement pas de la bonne manière. Merci encore.
SELECT c.[Name]
,ISNULL(cg.[Name],'') AS GroupName
FROM Customer c
LEFT JOIN CustomerGroup cg ON cg.ID = c.ID AND cg.[Name] = 'Sales'
Utilisez simplement une jointure gauche et coalesce().
SELECT c.name,
coalesce(cg.name, '')
FROM customer c
LEFT JOIN customergroup cg
ON cg.id = c.id
AND cg.name = 'Sales';
Cependant, je ne suis pas sûr que customergroup.id se réfère customer.id . Vous devrez peut-être remplacer cg.id par la colonne référençant réellement le client.
Alors, quel est le problème avec le SQL que vous avez maintenant, à part que
[NotInGroup] .groupgénérera une erreur carGROUPest un mot réservé dans SQL Server etle groupen'est pas entre guillemets; Je déconseille d'utiliser des mots réservés (et même clés) pour les noms / alias d'objet. De plus, vous utilisez unLEFT JOINmais en référençant la colonne dans leWHERE, donc en les transformant implicitement en unINNER JOIN(supposer que cela pourrait être ton problème).