我有两个表需要连接,然后来自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
答案 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