【发布时间】:2019-03-12 17:56:15
【问题描述】:
需要一点帮助:
正在编辑:我正在尝试根据销售额确定谁是我的前 40% 客户。然后,去掉那些客户,给我前 30%。然后删除这两个数据集,它们现在是 mytop 20%,等等
这是场景:。假设我们的总销售额为 1,000,000 美元。我想要一个客户排名系统来对 A、B、C 和 D 客户进行排名,看看谁是我最好的客户。
“A”类客户的交易占总收入的 40% --- 40 万美元 “B”客户交易接下来的 30% --- $300k “C”客户交易接下来的 20% --- $200k “D”客户交易总收入的最后 10%——10 万美元
这是我的 SQL:
declare @TotalTotal decimal(18,2)
declare @ATotalRankTotal decimal(18,2)
declare @BTotalRankTotal decimal(18,2)
declare @CTotalRankTotal decimal(18,2)
declare @DTotalRankTotal decimal(18,2)
SET @TotalTotal = 1000000
set @ATotalRankTotal = @TotalTotal * .40
set @BTotalRankTotal = @ATotalRankTotal + (@TotalTotal * .30)
set @CTotalRankTotal = @BTotalRankTotal + (@TotalTotal * .20)
set @DTotalRankTotal = @CTotalRankTotal + (@TotalTotal * .10)
select
CustomerName
, sum(TotalSales)
, TotalCustomerRank = CASE
WHEN SUM(sum(TotalSales)) over (order by SUM(TotalSales) desc) <= @ATotalRankTotal then
'A'
WHEN SUM(sum(TotalSales)) over (order by SUM(TotalSales) desc) > @ATotalRankTotal and SUM(sum(TotalSales)) over (order by SUM(TotalSales) desc) <= @BTotalRankTotal then
'B'
WHEN SUM(sum(TotalSales)) over (order by SUM(TotalSales) desc) > @BTotalRankTotal and SUM(sum(TotalSales)) over (order by SUM(TotalSales) desc) <= @CTotalRankTotal then
'C'
else
'D'
end
from
Customers
GROUP BY
CustomerName
我想出的问题是,我可能没有一个销售额达到 40 万美元或更多的客户,所以我永远不会知道我的“A”客户是谁。
关于如何编写脚本以确定哪些客户占据了我的前 40% 的收入(我的“A”客户),哪些客户占据了接下来的 30%(我的“B”客户),哪些客户占据了任何想法占下一个 20%(我的“C”客户),哪些客户占最后 10%(我的“D”客户)?
【问题讨论】:
-
我不确定一个样本数据集是否足够,可能需要提供多个场景。我不认为你对你想要的东西有很好的把握。 “哪些客户占据了我前 40% 的收入”并不是一个明确的描述。
-
只需添加另一列,并过滤每个案例其中 SalesDept = "A" 表示第一种情况,或 = "B" 表示第二种情况,...
-
我对我正在尝试做的事情有很好的把握,可能只是没有正确解释。根据销售额,我的前 40% 的客户是谁。然后,删除那些客户,现在他们是我的前 30%。然后删除这两个数据集,现在排名前 20%,等等。
-
正如@GordonLinoff 所说,为您的每个场景提供相关预期结果的样本数据将非常有帮助。
-
你考虑过使用 RANK() 吗?
标签: sql sql-server tsql