2010-09-14 74 views
0

我有兩個表需要連接,然後具有與表2中相同的crb_pi_id的多行結果將組合並作爲單行返回。有可能的?我在可打印的報告上使用了該結果。連接表並返回具有相同主ID的多行作爲單行

在此先感謝。

表1:

crb_pi_id,name,tel_no 
1,john,1111111 
2,paul,2222222 

表2:

crb_pd_id,crb_pi_id,account_name,amount 
1,1,salary,500 
2,1,utilities,800 
3,2,transportation,300 

結果應該

name,salary,utilities,trasportation 

john,500,800,0 
paul,0,0,300 

回答

0
select a.name, a.tel_no, sum(b.amount) as totamount 

from table1 a left outer join table2 b on a.crb_pi_id = b.crb_pi_id 
group by a.name, a.tel_no 

你必須包括任何從table1中的字段,你在選擇組中的語句列表

+0

喜拉吉,我想多行輸出在一個單一的行合併,但應在不同的顯示領域柱。 – tirso 2010-09-17 02:28:46

0

不知道你能真正做到這一點瓦特/直接的SQL除了使用光標和臨時變量被分配的每個單元值的值依次。或者如果您可以使用更高級別的語言,則可以在查詢調用的數組中使用php的implode()和字符串concat組合。

編輯1:哦,沒關係...權改變的問題後,我貼我的答案哈哈

編輯2:也許你想這樣的事情? (未經測試的僞)

select 
    t1.name, 
    case when (t2.crb_pi = t1.crb_pi) and (t2.account_name = 'salary') then t2.amount else 0 end as 'salary' 
    case when (t2.crb_pi = t1.crb_pi) and (t2.account_name = 'utilities') then t2.amount else 0 end as 'utilities' 
    case when (t2.crb_pi = t1.crb_pi) and (t2.account_name = 'transportation') then t2.amount else 0 end as 'transportation'  
from table1 t1 
left join table2 t2 
    on t2.crb_pi = t1.crb_pi 
+0

對不起,重複編輯和取消刪除。新的這個網站,仍然搞清楚如何做的東西與迴應&評論和東西:) – alien052002 2010-09-14 06:38:00

+0

嗨外星人,我試過你的代碼,但輸出仍然多行。這裏是我根據您的建議選擇的代碼 t1.name, case when when(t2.crb_pi_id = t1.crb_pi_id)and(t2.account_code ='salary')then then2.amount else 0 end as'salary', (t2.crb_pi_id = t1.crb_pi_id)和(t2.account_code ='utilities')的情況下,則t2.amount else 0結束爲'utilities', case when(t2.crb_pi_id = t1.crb_pi_id)and(t2。 ACCOUNT_CODE =「交通運輸類」),然後t2.amount否則爲0結束從crb_personal_info T1 左加入crb_personal_details T2 上t2.crb_pi_id = t1.crb_pi_id – tirso 2010-09-17 02:25:33

0

您可以子句在這裏使用,然後組的結果也相應

select t1.name 'name', t2.amount 'salary', 
CASE WHEN t2.crb_pi_id=t1.crb_pi_id and t2.crb_pd_id=2 then t2.amount ELSE 0 END 'utilities', 
CASE WHEN t2.crb_pi_id=t1.crb_pi_id and t2.crb_pd_id=3 then t2.amount ELSE 0 END 'trans' 
into #t3 
from #t1 t1 inner join #t2 t2 on t1.crb_pi_id=t2.crb_pi_id 

select name, max(salary), max(utilities), max(trans) 
from t3 
group by name 
+0

喜阿尼爾,Itried你的代碼,但出現了一個錯誤,說「交通運輸類」 (# 1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在'WITH t3(name,salary,utilities)附近使用的正確語法a s ( select t1.name,t2.amount'salary', C'at line 1) – tirso 2010-09-17 02:27:39

+0

我的錯誤.. mySQL不支持WITH子句。所以你可以使用臨時表。我編輯了我的帖子。 #t1和#t2代表你的兩個表格 – 2010-09-17 05:34:04

相關問題