2010-04-14 16 views
0

Je tente de regrouper un certain nombre de clients en fonction de leur emplacement «Siège social» ou «Parent». Cela fonctionne bien à l'exception d'une faille que je n'avais pas vue lorsque je développais mon système ... Pour les clients qui n'avaient pas de "Parent" (entreprise autonome), j'ai mis par défaut le parent_id à 0. Par conséquent, mon données ressemblerait à ceci:Aide sur la requête MySQL à l'aide de l'instruction CASE

id parent_id customer 
1 0   CustName#1 
2 4   CustName#2 - Melbourne 
3 4   CustName#2 - Sydney 
4 0   CustName#2 (Head Office) 

ce que je veux faire du groupe est mes résultats ensemble pour que j'ai une ligne pour CustName # 1 et une ligne pour CustName # 2, mais mon problème est qu'il n'y a pas d'enregistrement parent pour parent_id = 0 et ces lignes sont exclues lors de l'utilisation d'une jointure interne.

J'ai essayé d'utiliser une déclaration de cas, mais qui ne fonctionne pas non plus (les parents sont toujours ignorés)

Toute aide serait grandement apprécié. Voici ma requête (mon cas tente essentiellement d'obtenir la business_name de la table des clients en fonction de la parent_id SAUF lorsque la parent_id = 0, il suffit d'utiliser la customer_name qui figure dans le tableau job_summary):

SELECT 
js.month_of_year, 
(CASE js.parent_id WHEN 0 THEN js.customer_name ELSE c.business_name END) as customer, 
SUM(js.jobs), 
SUM(js.total_cost), 
sum(js.total_sell) 
FROM JOB_SUMMARY js INNER JOIN 
customer c on js.parent_id=c.id 
group by 
js.month_of_year, 
(CASE c.parent_id WHEN 0 THEN js.customer_name ELSE c.business_name END) 
ORDER BY `customer` ASC 

Répondre

1

Essayez un LEFT OUTER JOIN au lieu de INNER JOIN.

on js.parent_id=c.id est probablement filtrer les lignes où il n'y a pas de parents.

+0

Merci ... Je pense que cela fonctionne ... Je reçois maintenant Nulls dans la colonne c.customer_id donc je suppose que cela doit être des lignes où il ne pourrait pas correspondre ... Suivant prob, que dois-je faire à propos de la nulls? – sjw

+0

Je pense '(CASE c.parent_id QUAND 0 alors js.customer_name ELSE c.business_name END)' devrait être '(CAS js.parent_id QUAND 0 alors js.customer_name ELSE c.business_name END)' dans votre groupe par clause. – davek

+0

Où obtenez-vous c.customer_id: Je ne peux pas le voir dans votre requête. – davek