sql - SQL 将卷拆分为不重复存储桶 ID 的存储桶
问题描述
我在 MS SQL 中解决了可能很简单但对我来说不可能完成的任务。我有 2 张桌子 - 1 张有公司名称和用过的瓶子的总量。在第二个表中,我有一个具有唯一 ID 及其瓶容量的桶列表。我的任务是为每个公司分配正确数量的桶(以覆盖所有瓶子的体积),而不是两次使用相同的桶(不要为 2 家或 moře 公司重复使用相同 ID 的桶)。有人能帮我吗?谢谢!
解决方案
鉴于每个瓶子都相同并且每个桶具有相同容量(根据您的评论)的额外简化,这将起到作用:
-- demo schema
create table companies (cname char, bottlesUsed int);
create table buckets (id int, capacity int);
-- demo data
insert companies values ('a', 41), ('b', 2), ('c', 5), ('d', 50);
insert buckets select top 20 row_number() over (order by object_id), 20 from sys.objects;
with
bucketnums as
(
select i = row_number() over (order by id),
id
from buckets
),
bucketRanges as
(
select cname,
firstBucketNum = 1 + lag(lastBucketNum, 1, 0) over (order by cname),
lastBucketNum
from ( -- running total of bucket count required by each customer
select cname,
lastBucketNum = sum(ceiling(bottlesUsed * 1.0 / 20))
over (order by cname rows unbounded preceding)
from companies
) t
)
select conmpanyName = br.cname,
allocatedBucketId = bn.id
from bucketRanges br
join bucketnums bn on bn.i between firstBucketNum and lastBucketNum;
如果瓶子大小或桶容量是可变的,这个问题就会变得更加......“有趣”:)
推荐阅读
- prolog - Prolog文字游戏打印描述重复输出
- c# - 如何使用 C# 在 excel 的下拉列表中选择一个项目?
- java - 无法将 BLOB 保存到数据库(ORA-01460:需要未实现或无意义的转换)
- python - 在 Python 中使用从父类继承的方法时返回子类的新实例
- javascript - 仅在 ipad 上使用 AJAX 在制表器上加载数据时出错
- javascript - 鼠标离开后CSS过渡到原始状态
- wpf - kiosk 模式下的 XML 文档异常出现错误
- android - 滚动时更新自定义列表视图失败
- gulp - Gulp 给出 SyntaxError: Unexpected identifier; 节点问题。苹果电脑
- javascript - jison:如何在 jison 文件中添加“require”?