sql-server - 如何进行基于 SQL 范围的计算
问题描述
我有两列“TotalAmount”和“DefaultFees”
但是有一个更细化的表格显示,“0.010000”和“500.000000”之间的“TotalAmount”(即 837.681561)费用应该是“2.500000”
对于 '500.010000' 和 '800.000000' 之间的总金额的其余部分,即 300 费用应该是 '4.876000'
剩下的37.681561,应该是违约费。Min/Max 表可以有更多行
如何在 SQL 中实现这一点
预期产出
解决方案
尽管 Isaac 的答案更清楚,但作为替代解决方案,您可以使用带有子查询的 case-when 语句,如下所示。
Select TotalAmount,
case when TotalAmount >= (select max(MaximumAmount) from TableB) then DefaultFees
else (Select Fees
From TableB b
where a.TotalAmount<b.MaximumAmount and a.TotalAmount>=b.MinimumAmount
)
end as FinalFee
From TableA a
编辑:
根据您更新的问题,这是您要查找的查询:
CREATE TABLE #TableA (myVal INT, DefaultFee float)
INSERT INTO #TableA VALUES (837,3.66)
CREATE TABLE #TableB (minamount INT, maxamount INT, fees float)
INSERT INTO #TableB VALUES (0,500,2.5),(500,800,4.876)
;WITH cte AS (
SELECT ISNULL(b.minamount, (SELECT MAX(maxamount) FROM #tableB)) as [max]
from #TableA a
left join #TableB b on a.myVal between b.minamount and maxamount
)
SELECT maxamount, fees
FROM #TableB
WHERE maxamount <= (SELECT [max] FROM cte)
UNION
SELECT (a.myval - (SELECT [max] FROM cte)), a.DefaultFee
FROM #TableA a
ORDER BY 1 desc
推荐阅读
- azure-data-factory-2 - c#使用数据工厂使用Where子句过滤器将SQL表数据复制到另一个数据库
- javascript - 在 div 中的页面上显示 HREF 链接
- django - 从变量中删除大括号
- node.js - Node.js - Joi 架构:检查 req.value 和 ip 不工作
- wordpress - Magento中的Wordpress家庭地址给出404错误
- terminal - 使用 grep 搜索只有部分的整个单词/短语
- sql - 在临时表中使用变量 - SQL Server
- r - R将多列分成列表
- javascript - Javascript - 缓慢的 onMouseOver 和 onMouseOut
- python - 如果存在,则在 Python 中从列表(或其他对象)打开文件