【问题标题】:Distribute data into buckets based on sales根据销售额将数据分配到存储桶中
【发布时间】:2021-02-26 19:33:21
【问题描述】:

我一直在努力想出一个解决方案,该解决方案可以为一个区域内的客户创造 5 个平等的销售额。我尝试使用 while 循环和游标无济于事。我在其中定义了总销售额,然后将销售额除以 5,得出每个桶的销售额。

例如,如果总销售额为 100,000 美元,则存储桶大小将为 20,000 美元。该循环将从销售额最低到最高的客户开始填充存储桶 1,一旦分配到存储桶 2 的客户的总销售额超过 20,000 美元,将重复相同的过程以将剩余客户分配到存储桶 3-5 .

下面是一些生成示例数据的代码:

if object_id ('tempdb..#Customer') is not null
drop table #Customer;

CREATE TABLE #Customer(
 CustomerID int
,Region varchar(30)
,Sales money
)

INSERT INTO #Customer Select '1', 'East', '0'
INSERT INTO #Customer Select '2', 'East', '20'
INSERT INTO #Customer Select '3', 'East', '40'
INSERT INTO #Customer Select '4', 'East', '60'
INSERT INTO #Customer Select '5', 'East', '80'
INSERT INTO #Customer Select '6', 'East', '100'
INSERT INTO #Customer Select '7', 'East', '120'
INSERT INTO #Customer Select '8', 'East', '140'
INSERT INTO #Customer Select '9', 'East', '160'
INSERT INTO #Customer Select '10', 'East', '180'
INSERT INTO #Customer Select '11', 'East', '200'
INSERT INTO #Customer Select '12', 'East', '220'
INSERT INTO #Customer Select '13', 'East', '240'
INSERT INTO #Customer Select '14', 'East', '260'
INSERT INTO #Customer Select '15', 'East', '280'
INSERT INTO #Customer Select '16', 'East', '300'
INSERT INTO #Customer Select '17', 'East', '320'
INSERT INTO #Customer Select '18', 'East', '340'
INSERT INTO #Customer Select '19', 'East', '360'
INSERT INTO #Customer Select '20', 'East', '380'
INSERT INTO #Customer Select '21', 'East', '400'
INSERT INTO #Customer Select '22', 'East', '420'
INSERT INTO #Customer Select '23', 'East', '440'
INSERT INTO #Customer Select '24', 'East', '460'
INSERT INTO #Customer Select '25', 'East', '480'
INSERT INTO #Customer Select '26', 'East', '500'
INSERT INTO #Customer Select '27', 'East', '520'
INSERT INTO #Customer Select '28', 'East', '540'
INSERT INTO #Customer Select '29', 'East', '560'
INSERT INTO #Customer Select '30', 'East', '580'
INSERT INTO #Customer Select '31', 'East', '600'
INSERT INTO #Customer Select '32', 'East', '620'
INSERT INTO #Customer Select '33', 'East', '640'
INSERT INTO #Customer Select '34', 'East', '660'
INSERT INTO #Customer Select '35', 'East', '680'
INSERT INTO #Customer Select '36', 'East', '700'
INSERT INTO #Customer Select '37', 'East', '720'
INSERT INTO #Customer Select '38', 'East', '740'
INSERT INTO #Customer Select '39', 'East', '760'
INSERT INTO #Customer Select '40', 'East', '780'
INSERT INTO #Customer Select '41', 'East', '800'
INSERT INTO #Customer Select '42', 'East', '820'
INSERT INTO #Customer Select '43', 'East', '840'
INSERT INTO #Customer Select '44', 'East', '860'
INSERT INTO #Customer Select '45', 'East', '880'
INSERT INTO #Customer Select '46', 'East', '900'
INSERT INTO #Customer Select '47', 'East', '920'
INSERT INTO #Customer Select '48', 'East', '940'
INSERT INTO #Customer Select '49', 'East', '960'
INSERT INTO #Customer Select '50', 'East', '980'
INSERT INTO #Customer Select '51', 'East', '1000'
INSERT INTO #Customer Select '52', 'East', '1020'
INSERT INTO #Customer Select '53', 'East', '1040'
INSERT INTO #Customer Select '54', 'East', '1060'
INSERT INTO #Customer Select '55', 'East', '1080'
INSERT INTO #Customer Select '56', 'East', '1100'
INSERT INTO #Customer Select '57', 'East', '1120'
INSERT INTO #Customer Select '58', 'East', '1140'
INSERT INTO #Customer Select '59', 'East', '1160'
INSERT INTO #Customer Select '60', 'East', '1180'
INSERT INTO #Customer Select '61', 'East', '1200'
INSERT INTO #Customer Select '62', 'East', '1220'
INSERT INTO #Customer Select '63', 'East', '1240'
INSERT INTO #Customer Select '64', 'East', '1260'
INSERT INTO #Customer Select '65', 'East', '1280'
INSERT INTO #Customer Select '66', 'East', '1300'
INSERT INTO #Customer Select '67', 'East', '1320'
INSERT INTO #Customer Select '68', 'East', '1340'
INSERT INTO #Customer Select '69', 'East', '1360'
INSERT INTO #Customer Select '70', 'East', '1380'
INSERT INTO #Customer Select '71', 'East', '1400'
INSERT INTO #Customer Select '72', 'East', '1420'
INSERT INTO #Customer Select '73', 'East', '1440'
INSERT INTO #Customer Select '74', 'East', '1460'
INSERT INTO #Customer Select '75', 'East', '1480'
INSERT INTO #Customer Select '76', 'East', '1500'
INSERT INTO #Customer Select '77', 'East', '1520'
INSERT INTO #Customer Select '78', 'East', '1540'
INSERT INTO #Customer Select '79', 'East', '1560'
INSERT INTO #Customer Select '80', 'East', '1580'
INSERT INTO #Customer Select '81', 'East', '1600'
INSERT INTO #Customer Select '82', 'East', '1620'
INSERT INTO #Customer Select '83', 'East', '1640'
INSERT INTO #Customer Select '84', 'East', '1660'
INSERT INTO #Customer Select '85', 'East', '1680'
INSERT INTO #Customer Select '86', 'East', '1700'
INSERT INTO #Customer Select '87', 'East', '1720'
INSERT INTO #Customer Select '88', 'East', '1740'
INSERT INTO #Customer Select '89', 'East', '1760'
INSERT INTO #Customer Select '90', 'East', '1780'
INSERT INTO #Customer Select '91', 'East', '1800'
INSERT INTO #Customer Select '92', 'East', '1820'
INSERT INTO #Customer Select '93', 'East', '1840'
INSERT INTO #Customer Select '94', 'East', '1860'
INSERT INTO #Customer Select '95', 'East', '1880'
INSERT INTO #Customer Select '96', 'East', '1900'
INSERT INTO #Customer Select '97', 'East', '1920'
INSERT INTO #Customer Select '98', 'East', '1940'
INSERT INTO #Customer Select '99', 'East', '1960'
INSERT INTO #Customer Select '100', 'East', '2980'

这是我目前使用的逻辑,它适用于一个区域,但当我尝试包含另一个区域时,逻辑会使用两个区域的总销售额来应用存储桶来计算存储桶。

if object_id ('tempdb..#rank') is not null
    drop table #rank;

create table #rank (
     customer_Id int
    , region varchar(30)
    , sales money
    , sales_rank int
    , bucket int
    );

insert into #rank
select x.*
    , row_number() over (order by x.sales desc) as sales_rank
    , null as bucket
from #customer x;



declare @region_sales money, @bucket_amt money, @ctr int, @running_total money, @customer_id int, @sales money;
set @region_sales = (select sum(sales) from #customer);
set @bucket_amt = @region_sales / 5;
set @running_total = 0
set @ctr = 1

declare csr cursor forward_only for
select customer_id, sales from #rank order by sales_rank desc;
open csr
fetch next from csr into @customer_id, @sales
while @@FETCH_STATUS = 0
    begin
    if @running_total <= @bucket_amt
        begin
            set @running_total = @running_total + @sales;
            update x set x.bucket = @ctr from #rank x where x.customer_id = @customer_id;
        end
    else
        begin
            set @running_total = 0
            set @ctr = @ctr + 1
            update x set x.bucket = @ctr from #rank x where x.customer_id = @customer_id;
        end
    fetch next from csr into @customer_id, @sales
    end
close csr;
deallocate csr;

如何修改逻辑以分别为每个区域创建存储桶?

我对使用游标以外的任何其他方法持开放态度,因为这种方法在处理大量数据时可能会很慢。

使用上述相同的数据并复制为东部地区插入的记录并将重复的记录更改为西部地区(具有相同的客户和价值),此逻辑的最终结果将产生这些结果。

select Region, bucket, sum(sales) as Total_Sales from #rank
Group by Region, bucket

【问题讨论】:

    标签: sql-server bucket


    【解决方案1】:

    NTILE 是我认为您正在寻找的。试试下面的代码:

    如果 OBJECT_ID('tempdb..#Customer') 不为空 开始 删除表#客户; 结束;

    创建表#Customer ( 客户 ID 整数, 区域 varchar(30), 销售额小数(18, 2) );

    INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (1, 'East', 0); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (2, 'East', 20); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (3, 'East', 40); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (4, 'East', 60); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (5, 'East', 80); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (6, 'East', 100); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (7, 'East', 120); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (8, 'East', 140); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (9, 'East', 160); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (10, 'East', 180); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (11, 'East', 200); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (12, 'East', 220); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (13, 'East', 240); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (14, 'East', 260); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (15, 'East', 280); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (16, 'East', 300); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (17, 'East', 320); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (18, 'East', 340); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (19, 'East', 360); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (20, 'East', 380); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (21, 'East', 400); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (22, 'East', 420); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (23, 'East', 440); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (24, 'East', 460); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (25, 'East', 480); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (26, 'East', 500); 插入#Customer(CustomerID,Region,Sales)值(27,'East',520); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (28, 'East', 540); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (29, 'East', 560); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (30, 'East', 580); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (31, 'East', 600); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (32, 'East', 620); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (33, 'East', 640); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (34, 'East', 660); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (35, 'East', 680); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (36, 'East', 700); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (37, 'East', 720); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (38, 'East', 740); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (39, 'East', 760); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (40, 'East', 780); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (41, 'East', 800); 插入#Customer(CustomerID,Region,Sales)值(42,'East',820); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (43, 'East', 840); 插入#Customer(CustomerID,Region,Sales)值(44,'East',860); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (45, 'East', 880); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (46, 'East', 900); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (47, 'East', 920); 插入#Customer(CustomerID,Region,Sales)值(48,'East',940); 插入#Customer(CustomerID,Region,Sales)值(49,'East',960); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (50, 'East', 980); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (51, 'East', 1000); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (52, 'East', 1020); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (53, 'East', 1040); 插入#Customer(CustomerID, Region, Sales) VALUES (54, 'East', 1060); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (55, 'East', 1080); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (56, 'East', 1100); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (57, 'East', 1120); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (58, 'East', 1140); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (59, 'East', 1160); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (60, 'East', 1180); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (61, 'East', 1200); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (62, 'East', 1220); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (63, 'East', 1240); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (64, 'East', 1260); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (65, 'East', 1280); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (66, 'East', 1300); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (67, 'East', 1320); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (68, 'East', 1340); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (69, 'East', 1360); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (70, 'East', 1380); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (71, 'East', 1400); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (72, 'East', 1420); 插入#Customer(CustomerID,Region,Sales)值(73,'East',1440); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (74, 'East', 1460); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (75, 'East', 1480); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (76, 'East', 1500); 插入#Customer(CustomerID,Region,Sales)值(77,'East',1520); 插入#Customer(CustomerID,Region,Sales)值(78,'East',1540); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (79, 'East', 1560); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (80, 'East', 1580); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (81, 'East', 1600); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (82, 'East', 1620); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (83, 'East', 1640); 插入#Customer(CustomerID,Region,Sales)值(84,'East',1660); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (85, 'East', 1680); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (86, 'East', 1700); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (87, 'East', 1720); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (88, 'East', 1740); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (89, 'East', 1760); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (90, 'East', 1780); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (91, 'East', 1800); 插入#Customer(CustomerID,Region,Sales)值(92,'East',1820); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (93, 'East', 1840); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (94, 'East', 1860); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (95, 'East', 1880); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (96, 'East', 1900); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (97, 'East', 1920); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (98, 'East', 1940); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (99, 'East', 1960); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES (100, 'East', 2980);

    INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(101, 'West', 0); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(102, 'West', 20); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(103, 'West', 40); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(104, 'West', 60); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(105, 'West', 80); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(106, 'West', 100); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(107, 'West', 120); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(108, 'West', 140); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(109, 'West', 160); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(110, 'West', 180); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(111, 'West', 200); 插入#Customer(CustomerID,Region,Sales)值(112,'West',220); 插入#Customer(CustomerID,Region,Sales)值(113,'West',240); 插入#Customer(CustomerID,Region,Sales)值(114,'West',260); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(115, 'West', 280); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(116, 'West', 300); 插入#Customer(CustomerID,Region,Sales)值(117,'West',320); 插入#Customer(CustomerID,Region,Sales)值(118,'West',340); 插入#Customer(CustomerID,Region,Sales)值(119,'West',360); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(120, 'West', 380); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(121, 'West', 400); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(122, 'West', 420); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(123, 'West', 440); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(124, 'West', 460); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(125, 'West', 480); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(126, 'West', 500); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(127, 'West', 520); 插入#Customer(CustomerID,Region,Sales)值(128,'West',540); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(129, 'West', 560); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(130, 'West', 580); 插入#Customer(CustomerID,Region,Sales)值(131,'West',600); 插入#Customer(CustomerID,Region,Sales)值(132,'West',620); 插入#Customer(CustomerID,Region,Sales)值(133,'West',640); 插入#Customer(CustomerID,Region,Sales)值(134,'West',660); 插入#Customer(CustomerID,Region,Sales)值(135,'West',680); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(136, 'West', 700); 插入#Customer(CustomerID,Region,Sales)值(137,'West',720); 插入#Customer(CustomerID,Region,Sales)值(138,'West',740); 插入#Customer(CustomerID,Region,Sales)值(139,'West',760); 插入#Customer(CustomerID,Region,Sales)值(140,'West',780); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(141, 'West', 800); 插入#Customer(CustomerID,Region,Sales)值(142,'West',820); 插入#Customer(CustomerID,Region,Sales)值(143,'West',840); 插入#Customer(CustomerID,Region,Sales)值(144,'West',860); 插入#Customer(CustomerID,Region,Sales)值(145,'West',880); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(146, 'West', 900); 插入#Customer(CustomerID,Region,Sales)值(147,'West',920); 插入#Customer(CustomerID,Region,Sales)值(148,'West',940); 插入#Customer(CustomerID,Region,Sales)值(149,'West',960); 插入#Customer(CustomerID,Region,Sales)值(150,'West',980); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(151, 'West', 1000); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(152, 'West', 1020); 插入#Customer(CustomerID,Region,Sales)值(153,'West',1040); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(154, 'West', 1060); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(155, 'West', 1080); 插入#Customer(CustomerID,Region,Sales)值(156,'West',1100); 插入#Customer(CustomerID,Region,Sales)值(157,'West',1120); 插入#Customer(CustomerID,Region,Sales)值(158,'West',1140); 插入#Customer(CustomerID,Region,Sales)值(159,'West',1160); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(160, 'West', 1180); 插入#Customer(CustomerID,Region,Sales)值(161,'West',1200); 插入#Customer(CustomerID,Region,Sales)值(162,'West',1220); 插入#Customer(CustomerID,Region,Sales)值(163,'West',1240); 插入#Customer(CustomerID,Region,Sales)值(164,'West',1260); 插入#Customer(CustomerID,Region,Sales)值(165,'West',1280); 插入#Customer(CustomerID,Region,Sales)值(166,'West',1300); 插入#Customer(CustomerID,Region,Sales)值(167,'West',1320); 插入#Customer(CustomerID,Region,Sales)值(168,'West',1340); 插入#Customer(CustomerID,Region,Sales)值(169,'West',1360); 插入#Customer(CustomerID,Region,Sales)值(170,'West',1380); 插入#Customer(CustomerID,Region,Sales)值(171,'West',1400); 插入#Customer(CustomerID,Region,Sales)值(172,'West',1420); 插入#Customer(CustomerID,Region,Sales)值(173,'West',1440); 插入#Customer(CustomerID,Region,Sales)值(174,'West',1460); 插入#Customer(CustomerID,Region,Sales)值(175,'West',1480); 插入#Customer(CustomerID,Region,Sales)值(176,'West',1500); 插入#Customer(CustomerID,Region,Sales)值(177,'West',1520); 插入#Customer(CustomerID,Region,Sales)值(178,'West',1540); 插入#Customer(CustomerID,Region,Sales)值(179,'West',1560); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(180, 'West', 1580); 插入#Customer(CustomerID,Region,Sales)值(181,'West',1600); 插入#Customer(CustomerID,Region,Sales)值(182,'West',1620); 插入#Customer(CustomerID,Region,Sales)值(183,'West',1640); 插入#Customer(CustomerID,Region,Sales)值(184,'West',1660); 插入#Customer(CustomerID,Region,Sales)值(185,'West',1680); 插入#Customer(CustomerID,Region,Sales)值(186,'West',1700); 插入#Customer(CustomerID,Region,Sales)值(187,'West',1720); 插入#Customer(CustomerID,Region,Sales)值(188,'West',1740); 插入#Customer(CustomerID,Region,Sales)值(189,'West',1760); 插入#Customer(CustomerID,Region,Sales)值(190,'West',1780); 插入#Customer(CustomerID,Region,Sales)值(191,'West',1800); 插入#Customer(CustomerID,Region,Sales)值(192,'West',1820); 插入#Customer(CustomerID,Region,Sales)值(193,'West',1840); 插入#Customer(CustomerID,Region,Sales)值(194,'West',1860); 插入#Customer(CustomerID,Region,Sales)值(195,'West',1880); 插入#Customer(CustomerID,Region,Sales)值(196,'West',1900); 插入#Customer(CustomerID,Region,Sales)值(197,'West',1920); 插入#Customer(CustomerID,Region,Sales)值(198,'West',1940); 插入#Customer(CustomerID,Region,Sales)值(199,'West',1960); INSERT INTO #Customer(CustomerID, Region, Sales) VALUES(200, 'West', 2980);

    选择客户 ID、地区、销售、 NTILE(5) OVER(PARTITION BY Region ORDER BY Sales DESC) AS Bucket 来自#Customer;

    【讨论】:

    • 谢谢格雷格!我尝试了 NTILE,但结果与我正在寻找的不同。当我使用游标方法时,它会产生等效的销售量。对于东部地区,我获得了 20,700 美元的存储桶 1,22,200 美元的存储桶 2,21,900 美元的存储桶 3,22,620 美元的存储桶 4,12,580 美元的存储桶 5。随着逻辑填充每个桶,直到桶值超过总销售额的五分之一。 NTILE 根据客户的平均分布与销售的平均分布来创建存储桶,因此对于东部地区,所有 5 个存储桶都有 20 个客户。
    • 哥奇亚。以为您在分散客户数量,而不是客户组的总销售额。
    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2022-12-31
    相关资源
    最近更新 更多