首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >选择某列的值最接近的行

选择某列的值最接近的行
EN

Stack Overflow用户
提问于 2019-06-05 08:37:29
回答 3查看 249关注 0票数 0

我需要知道销售员根据产品销售的利润率有权获得的佣金百分比。

为此,我有下表:

代码语言:javascript
复制
Margin    Commission
--------------------
15         9
30        10
60        11
70        12
80        13
90        15

让我们假设利润率为29。因此,我需要一个返回第二行的查询(间隔为30,这是最接近的)。

如何编写返回此行的SQL查询?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-05 08:43:56

这应该是一个使用abs()的简单查询

代码语言:javascript
复制
declare @m table(Margin int,    Comission int)
insert @m values (15, 9)
,(30, 10)
,(60, 11)
,(70, 12)
,(80, 13)
,(90, 15)

declare @target int; set @target=29

; with r as (
    select *, row_number() over (order by abs(Margin-@target)) closest
    from @m
    )
select * from r where closest=1
票数 1
EN

Stack Overflow用户

发布于 2019-06-05 09:37:39

您可以使用apply

代码语言:javascript
复制
select sp.*, c.commission
from salesperson sp outer apply
     (select top (1) c.*
      from commissions c
      where c.margin <= sp.margin
      order by c.margin desc
     ) c;
票数 1
EN

Stack Overflow用户

发布于 2019-06-05 12:03:29

您可以使用子查询来解决此问题。最近似的>>使用Min(ABS())来获得它。

代码语言:javascript
复制
select * 
from table 
where (select Min(ABS(table.Margin - "your profit") from table ))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56452916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档