连接表并返回具有相同主ID的多行作为单行

时间:2010-09-14 06:11:13

标签: mysql

我有两个表需要连接,然后来自table2的同一个crb_pi_id的多行结果将合并并返回为单行。有可能的?我在打印报告上使用了这个结果。

提前致谢。

table1:

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

table2:

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

3 个答案:

答案 0 :(得分: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

您必须在table语句

中的select中列出table1中的任何字段

答案 1 :(得分:0)

除了使用游标和临时变量连续分配每个单元格值之外,

不确定你是否可以真正做到这一点。或者如果你可以使用更高级别的语言,你可以在查询调用的数组中使用php的implode()和string 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

答案 2 :(得分:0)

您可以在此处使用with子句,然后相应地对结果进行分组

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