日期:2014-05-17  浏览次数:21267 次

两个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实现这个是很简单的,我相信其它开发工具也有类似的报表工具。还有图表工具也和这个类似,还是让客户计算机来计算的好。