每天有一个销售收入表和另一个评级表,用于根据收入里程碑计算业绩。
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
因此,最终的表现应该如下
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
我可以知道如何设置匹配的查询吗?谢谢
编辑以修改字词
发布于 2017-06-07 03:20:54
实现这一目标的最简单的两种方法是使用select语句中的子查询或外部应用。例如:
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;
或者..。
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
),因为这个百分比不太可能随着收入的增加而下降。
发布于 2017-06-07 03:22:37
试试这个:
Select S.Date
,S.Revenue
,( (Select Max(R.Percentage)
From Rating R
Where S.Revenue < R.Revenue)
* S.Revenue) as Performance
From Sales S
发布于 2017-06-07 03:34:01
首先,以一种方式获得性能评等表,使每个记录都具有范围和相应的评等。然后根据性能范围加入销售数据,并计算最终性能。
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
把它拆散
select lag(Revenue, 1, 0) over (order by Revenue) LowVal, Revenue HighVal, Percentage
from Rating
将为您提供中间结果集:
0 20000 1.1
20000 30000 1.2
30000 40000 1.3
然后根据销售收入的连接条件将此结果集加入到Sales表中,该结果集位于上述集合中的任意范围内。
https://stackoverflow.com/questions/44402838
复制相似问题