【发布时间】:2019-05-13 14:37:27
【问题描述】:
我有一个表,它是 SQL 数据库中一些计算的结果,它看起来像这样:
[ID] [PAR1] [PAR2]
[A] [110] [0.5]
[B] [105] [1.5]
[C] [120] [2.0]
[D] [130] [3.0]
[E] [115] [5.5]
[F] [130] [6.5]
[G] [120] [7.0]
[H] [110] [7.5]
[I] [105] [8.0]
[J] [120] [9.0]
[K] [110] [9.5]
它按 PAR2 排序 - 更少意味着更好的结果。 我需要从 3 行中找到 SUM PAR2 的最佳结果,其中 PAR1 的总和最小为 350(至少 350)。例如:
- A+B+C的组合给出和PAR2的最佳结果(0.5+1.5+2.0=4.0),但是PAR1的和:110+105+120=335
- A+B+D的组合给出和PAR2的结果(0.5+1.5+3.0=5.0),但是PAR1的和:110+105+130=345
- A+B+E的组合给出和PAR2的结果(0.5+1.5+5.5=7.5),但是PAR1的和:110+105+115=330
- A+B+F的组合给出和PAR2的结果(0.5+1.5+6.5=8.5),但是PAR1的和:110+105+130=345
- B+C+D的组合给出和PAR2的结果(1.5+2.0+3.0=6.5),和PAR1的和:105+120+130=355 >(350)- 条件没问题!所以我们有一个最好成绩 6.5 的获胜者
这是一个 ASP.NET 应用程序,所以我尝试从数据库中获取表并使用后面的 VB 代码来获取结果,但这是使用 FOR..NEXT LOOP 的“手动”工作,需要一些时间。所以对于这样的计算来说,这不是一个很好的选择,而且速度也太慢了。
我想知道是否有更好的平滑和智能的 SQL 代码来直接从 SQL Query 中获取结果。也许一些高级数学函数?有什么想法吗?
提前致谢。
我使用 forpas 解决方案做了一些测试,是的,效果很好。但是当我添加很多 WHERE 条件时需要很长时间,因为原始表非常大。因此,我将尝试找到在函数(而不是过程)中使用临时表的解决方案。谢谢大家的答案。
forpas,也特别感谢示例和解释,这样你让我快速理解你的想法 - 这是大师级;)
【问题讨论】:
-
什么类型的SQL数据库? SQL 服务器?甲骨文? MySQL?还有什么?
-
这是一个 MS SQL Server
-
谢谢。我添加了一个合适的标签。在询问 SQL 问题时,您需要始终这样做,否则人们无法提出解决方案,以防它涉及特定于您的 SQL 版本的函数或关键字。并非所有数据库引擎都是平等的......
-
谢谢。我是 stackoverflow 的新手。
-
自加入表两次,应用条件,找到最大值。
标签: sql sql-server