两个table的数据合并显示,SQL怎么写?
有2个table
table a 存放用户基本信息
id name ...
A001 Apple ...
A002 Bill ...
...
table b 存放发票号,付款日期,金额,一个月一个用户可以有多张发票,对应的也有多个金额
id bill_num payment_date amount
A001 b_bj_07/0201 02/01/2007 500
A001 b_bj_07/0202 02/02/2007 600
A001 b_bj_07/0301 03/01/2007 700
A002 b_sy_07/0101 01/01/2007 800
...
现在要把这里两个表的数据显示出来,一个客户一行,
bill_num输入该用户该年所有发票号,接下来的每个月显示该客户该月的所有金额,格式如下:
id name bill_num Jan Feb Mar...(一共12个月)
----------------------------
A001 Apple b_bj_07/0201 0 1100 700 ...
b_bj_07/0202
b_bj_07/0301
----------------------------
A002 Bill b_sy_07/0101 800 0 0 ...
请问这样能用一句SQL写出来吗?
------解决方案--------------------还是通过程序来实现吧。
------解决方案--------------------牵涉到行列转换,烦
------解决方案--------------------这种要求应该可以用一句SQL写出来,但要分解考虑后再合并到一起。
思路:
1、完成前部分,a、b 关联一下,之后判断每组除第一名之外,空白显示:
id name bill_num
---------------------------
A001 Apple b_bj_07/0201
b_bj_07/0202
b_bj_07/0301
----------------------------
A002 Bill b_sy_07/0101
内核sql类似如下:
SELECT c.id,c.name,c.bill_num,
row_number() over(partition by c.id,c.name order by c.bill_num) as cu1
FROM
(select a.id,a.name,b.bill_num
from a,b
where a.id=b.id(+)) c
order by c.bill_num
之后decode(cu1,1,c.id, ' '),decode(cu1,1,c.name, ' ')
------解决方案--------------------有那么多的报表工具,何必让oracle消耗那么多的资源。如果是pb实现这个是很简单的,我相信其它开发工具也有类似的报表工具。还有图表工具也和这个类似,还是让客户计算机来计算的好。