首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据另一表中的评等计算性能

根据另一表中的评等计算性能
EN

Stack Overflow用户
提问于 2017-06-07 03:07:28
回答 3查看 59关注 0票数 1

每天有一个销售收入表和另一个评级表,用于根据收入里程碑计算业绩。

代码语言:javascript
运行
复制
CREATE TABLE #Rating(
    [Revenue] int NULL,
    [Percentage] float NULL
) ON [PRIMARY]

insert into [#Rating] select 20000, 1.1
insert into [#Rating] select 30000, 1.2
insert into [#Rating] select 40000, 1.3

CREATE TABLE #Sales(
    [Date] datetime,
    [Revenue] int NULL
) ON [PRIMARY]

insert into #Sales select '2017-01-01', 7000
insert into #Sales select '2017-01-02', 22000
insert into #Sales select '2017-01-03', 33000
insert into #Sales select '2017-01-04', 46000
insert into #Sales select '2017-01-05', 50000

我们希望根据评级来评估销售业绩。例如,

如果收入达到20000里程碑,性能=收入* 1.0

如果收入达到30000里程碑,性能=收入* 1.1

因此,最终的表现应该如下

代码语言:javascript
运行
复制
Date, Revenue, Performance
'2017-01-01', 7000, 7000
'2017-01-02', 22000, 24200
'2017-01-03', 33000, 39600
'2017-01-04', 46000, 59800
'2017-01-05', 50000, 65000

我可以知道如何设置匹配的查询吗?谢谢

编辑以修改字词

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-07 03:20:54

实现这一目标的最简单的两种方法是使用select语句中的子查询或外部应用。例如:

代码语言:javascript
运行
复制
SELECT S.[Date],
       S.Revenue, 
       Performance = S.Revenue * COALESCE((SELECT TOP 1 R.Percentage FROM #Rating AS R WHERE R.Revenue <= S.Revenue ORDER BY R.Revenue DESC), 1)
FROM #Sales S;

或者..。

代码语言:javascript
运行
复制
SELECT S.[Date],
       S.Revenue, 
       Performance = S.Revenue * COALESCE(R.Percentage, 1)
FROM #Sales S
OUTER APPLY (SELECT TOP 1 R.Percentage FROM #Rating AS R WHERE R.Revenue <= S.Revenue ORDER BY R.Revenue DESC) AS R;

注意:您可能会使用MAX(R.Percentage)而不是TOP 1 (也不包括ORDER BY R.Revenue DESC ),因为这个百分比不太可能随着收入的增加而下降。

票数 1
EN

Stack Overflow用户

发布于 2017-06-07 03:22:37

试试这个:

代码语言:javascript
运行
复制
 Select S.Date
       ,S.Revenue
       ,(   (Select Max(R.Percentage)
             From Rating R
             Where S.Revenue < R.Revenue)
         * S.Revenue) as Performance
 From Sales S
票数 0
EN

Stack Overflow用户

发布于 2017-06-07 03:34:01

首先,以一种方式获得性能评等表,使每个记录都具有范围和相应的评等。然后根据性能范围加入销售数据,并计算最终性能。

代码语言:javascript
运行
复制
with 
RangePerformance as 
( 
select lag(Revenue, 1, 0) over (order by Revenue) LowVal, Revenue HighVal, Percentage 
from Rating
)
select  sales.Date, sales.Revenue, sales.Revenue*RangePerformance.Percentage
from sales 
join RangePerformance 
on sales.Revenue between RangePerformance.LowVal and RangePerformance.HighVal

把它拆散

代码语言:javascript
运行
复制
select lag(Revenue, 1, 0) over (order by Revenue) LowVal, Revenue HighVal, Percentage 
from Rating

将为您提供中间结果集:

代码语言:javascript
运行
复制
0     20000 1.1
20000 30000 1.2
30000 40000 1.3

然后根据销售收入的连接条件将此结果集加入到Sales表中,该结果集位于上述集合中的任意范围内。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44402838

复制
相关文章

相似问题

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