2010-04-14 115 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