【发布时间】:2020-12-20 05:39:17
【问题描述】:
我有以下表格结构(简化以使基本内容清晰),其中列出了每个贷款类别和银行分行中的前 3 名银行客户。 SNO 列是客户的排名,其值最大为 3。
| Loan Category | SNO | Branch | Customer Name | Amount |
|---|---|---|---|---|
| Home Loan | 1 | abc | Piyush | 10000 |
| Home Loan | 2 | abc | Shyam | 5000 |
| Home Loan | 3 | abc | Kamal | 2000 |
| Home Loan | 1 | xyz | Xman | 50000 |
| Home Loan | 2 | xyz | Shyam | 20000 |
| Auto Loan | 1 | abc | Birendra | 10000 |
| Personal Loan | 1 | xyz | Gyan | 5000 |
| Personal Loan | 2 | xyz | Prakash | 2000 |
我正在尝试制作另一个表,如果每个贷款类别和分行中的客户少于 3 个,则为每个分行和类别插入一个虚拟行,其中客户名称和金额的值为 NULL。 本质上,我正在尝试获取下表。
| Loan Category | SNO | Branch | Customer Name | Amount | |
|---|---|---|---|---|---|
| Home Loan | 1 | abc | Piyush | 10000 | |
| Home Loan | 2 | abc | Shyam | 5000 | |
| Home Loan | 3 | abc | Kamal | 2000 | |
| Home Loan | 1 | xyz | Xman | 50000 | |
| Home Loan | 2 | xyz | Shyam | 20000 | |
| Home Loan | 3 | xyz | added row | ||
| Auto Loan | 1 | abc | Birendra | 10000 | |
| Auto Loan | 2 | abc | added row | ||
| Auto Loan | 3 | abc | added row | ||
| Auto Loan | 1 | xyz | added row | ||
| Auto Loan | 2 | xyz | added row | ||
| Auto Loan | 3 | xyz | added row | ||
| Personal Loan | 1 | xyz | Gyan | 5000 | |
| Personal Loan | 2 | xyz | Prakash | 2000 | |
| Personal Loan | 3 | xyz | added row | ||
| Personal Loan | 1 | abc | added row | ||
| Personal Loan | 2 | abc | added row | ||
| Personal Loan | 3 | abc | added row |
我已经解决了这个问题,方法是使用循环遍历所有类别和分支并插入虚拟行,如果每个类别/分支的 max(sno)
我需要编写一些好的逻辑,最好只使用 SQL 构造或不使用任何循环。
【问题讨论】:
-
“表结构(简化以使基本的事情清楚),列出了银行每个贷款类别和分行中排名前三的银行客户。” 这本身就是一个有缺陷的设计。每次客户获得新贷款或支付现有贷款时,您都必须不断检查并可能更新该表。更不用说将应计利息应用于贷款余额的影响。您不应该存储可以(并且应该)在运行时计算的内容。