列出客户ID,姓名和他/她的所有帐户

时间:2012-12-05 07:03:13

标签: oracle plsql

customers:
+------------+--------------+ 
| cid        | Name         | 
+------------+--------------+ 
| 1          | Bob          |
| 2          | John         | 
| 3          | Jane         | 
+------------+--------------+ 
accounts:
+------------+--------------+ 
| aid        | type         | 
+------------+--------------+ 
| 1          | Checking     |
| 2          | Saving       | 
| 3          | CD           | 
+------------+--------------+ 
transactions:
+------------+--------------+--------------+ 
| tid        | cid          | aid          | 
+------------+--------------+--------------+ 
| 1          | 1            | 1            | 
| 2          | 2            | 1            | 
| 3          | 1            | 2            | 
| 4          | 2            | 3            | 
| 5          | 3            | 1            | 
+------------+--------------+--------------+

我正在尝试编写一个plsql过程,在给定客户ID作为参数的情况下,将显示他/她的id,名称和所有帐户。显示id和名称很简单。我不确定的是如何获取与客户ID相关联的所有帐户以及如何检索多个帐户。

1 个答案:

答案 0 :(得分:0)

ideea可以是:

select c.cid, c.name, a.type
from customers c
left join transactions t on (t.cid = c.cid)
left join accounts a on (a.aid = t.aid)
where c.cid = :customer_id
group by c.cid, c.name, a.type;

需要分组,因为可以进行更多交易。

此外,如果你想看到一行:

select cid, name, LISTAGG(type, ',') WITHIN GROUP (ORDER BY type) as account_types
from(
    select distinct c.cid, c.name, a.type
    from customers c
    left join transactions t on (t.cid = c.cid)
    left join accounts a on (a.aid = t.aid)
    where c.cid = :customer_id

)
group by cid, name;

将它放入存储过程/函数中太简单了,所以我让它给你。