2010-04-14 107 views
0

我想根据他们的“总部”或“父”位置将许多客户组合在一起。使用CASE语句帮助MySQL查询

这个工作正常,除了我在开发我的系统时并未预见到的缺陷......对于没有“Parent”(独立业务)的客户,我默认parent_id为0.因此,我的数据是这样的:

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

我想要做的是组我的结果放在一起,这样就没有父母的记录,我对的CustName#1一行,为的CustName#2一行但我的问题是对于parent_id = 0,并且在使用内部联接时排除这些行。

我已经使用CASE语句,尝试,但不工作或者(父母仍然被忽略)

任何帮助将不胜感激。 这里是我的查询(我的情况基本上是试图从基于的PARENT_ID customer表中BUSINESS_NAME除了当PARENT_ID = 0,那么就使用在job_summary表中列出的CUSTOMER_NAME):

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 

回答

1

尝试LEFT OUTER JOIN而不是INNER JOIN

on js.parent_id=c.id大概是过滤掉没有父母的行。

+0

谢谢...我认为这有效...我现在在c.customer_id列中得到空值,所以我猜它必须是行不能匹配的行...下一个概率,我该怎么做空? – sjw 2010-04-14 07:05:56

+0

我认为'(CASE c.parent_id WHEN 0 THEN js.customer_name ELSE c.business_name END)'应该是'(CASE js.parent_id WHEN 0 THEN js.customer_name ELSE c.business_name END)'在你的group by子句中。 – davek 2010-04-14 07:08:56

+0

你在哪里得到c.customer_id:我在你的查询中看不到它。 – davek 2010-04-14 07:09:25