2012-12-05 64 views
2
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關聯的帳戶以及如何檢索多個帳戶。列出客戶ID,名稱和所有他/她的帳戶

+0

什麼版本的Oracle? –

+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; 

把這個變成一個存儲過程/函數是太簡單了,所以我讓他給你。

相關問題