【发布时间】:2021-07-12 13:32:43
【问题描述】:
这是我正在使用的表:
| CUST_REF | ACCOUNT_NUMBER | VALUATION | RATE |
|---|---|---|---|
| 10001 | ABC123 | 2000 | 0.0025 |
| 10001 | XYZ456 | 3000 | 45 |
| 10001 | DEF334 | 2000 | 45 |
我正在尝试在 SQL Server 中构建一个费用计算器,该计算器将费率应用于帐户估值,并加入了一些特殊条件。我设法掩盖了所有排列,但被一个边缘情况抛出在某些情况下,我需要采用每月 3.75 英镑的固定费率。
对于上面的示例,我要生成的表以及预期的输出如下:
| CUST_REF | ACCOUNT_NUMBER | VALUATION | RATE | FEE |
|---|---|---|---|---|
| 10001 | ABC123 | 2000 | 0.0025 | 0.42 |
| 10001 | XYZ456 | 3000 | 45 | 2.25 |
| 10001 | DEF334 | 2000 | 45 | 1.50 |
基本上:
- 如果费率不是“45”,则通过将估价数字乘以费率 / 12 来计算费用。
- 当有 45 个账户出现在任何账户上时,将 3.75 英镑的固定数字在任何账户之间以 45 的比率除以估值的比例 - 在本例中 3000 / 5000 = 60% 或 2.25 到第一个帐户和 1.50 到下一个。
我试过了……
SELECT
A.CUST_REF,
A.ACCOUNT_NUMBER,
A.VALUATION,
A.RATE,
CASE
WHEN A.RATE= 45 THEN 3.75 * (A.VALUATION) / SUM(A.VALUATION) OVER (PARTITION BY A.CUST_REF)
WHEN A.RATE != 45 THEN (A.VALUATION) * (A.RATE/12)
FROM FEES_TABLE A
...但是上面的代码没有产生预期的输出,因为计算的比例不准确。
有什么想法吗?
【问题讨论】:
标签: sql-server window-functions aggregation