- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的任务是以特定方式组合两个表。我有一个包含某些商品 (tovar) 需求的表 Demands
。每条记录都有自己的 ID、Tovar、需求日期和金额。我还有另一个表 Unloads
,其中包含 tovar 的卸载。每条记录都有自己的 ID、Tovar、卸载顺序和金额。 Demands
和 Unloads
彼此不对应,需求量和卸载量不完全相等。一个需求可能有 10 个单位,并且可以有两个卸载 4 和 6 个单位。并且可以有3个和5个单位的两个需求,11个单位可以有一个卸载。
任务是获取一个表格,该表格将显示卸载量如何覆盖需求。我有一个解决方案 ( SQL Fiddle ),但我认为还有更好的解决方案。谁能告诉我这些任务是如何解决的?
我有什么:
------------------------------------------
| DemandNumber | Tovar | Amount | Order |
|--------------------------------|--------
| Demand#1 | Meat | 2 | 1 |
| Demand#2 | Meat | 3 | 2 |
| Demand#3 | Milk | 6 | 1 |
| Demand#4 | Eggs | 1 | 1 |
| Demand#5 | Eggs | 5 | 2 |
| Demand#6 | Eggs | 3 | 3 |
------------------------------------------
------------------------------------------
| SaleNumber | Tovar | Amount | Order |
|--------------------------------|--------
| Sale#1 | Meat | 6 | 1 |
| Sale#2 | Milk | 2 | 1 |
| Sale#3 | Milk | 1 | 2 |
| Sale#4 | Eggs | 2 | 1 |
| Sale#5 | Eggs | 1 | 2 |
| Sale#6 | Eggs | 4 | 3 |
------------------------------------------
我想收到什么
-------------------------------------------------
| DemandNumber | SaleNumber | Tovar | Amount |
-------------------------------------------------
| Demand#1 | Sale#1 | Meat | 2 |
| Demand#2 | Sale#1 | Meat | 3 |
| Demand#3 | Sale#2 | Milk | 2 |
| Demand#3 | Sale#3 | Milk | 1 |
| Demand#4 | Sale#4 | Eggs | 1 |
| Demand#5 | Sale#4 | Eggs | 1 |
| Demand#5 | Sale#5 | Eggs | 1 |
| Demand#5 | Sale#6 | Eggs | 3 |
| Demand#6 | Sale#6 | Eggs | 1 |
-------------------------------------------------
这里是作者评论的补充说明:
示例中的字段Order
决定了计算的顺序。我们必须根据他们的订单处理需求。需求#1 必须在需求#2 之前处理。并且销售也必须根据他们的订单号进行分配。如果销售订单较低的鸡蛋和未分配的鸡蛋,我们不能分配销售的鸡蛋。
我能得到这个的唯一方法是使用循环。是否可以避免循环并仅使用 t-sql 解决此任务?
最佳答案
如果 Amount
值是 int
并且不是太大(不是数百万),那么我会使用 table of numbers生成与每个 Amount
的值一样多的行。这里有个好article描述如何生成它。
然后很容易加入 Demand
和 Sale
并根据需要分组和求和。
否则,一个简单明了的游标(实际上是两个游标)将易于实现、易于理解并且具有 O(n)
的复杂性。如果 Amounts
很小,基于集合的变体可能比游标更快。如果 Amounts
很大,光标可能会更快。您需要使用实际数据来衡量性能。
这是一个使用数字表的查询。要了解其工作原理,请分别运行 CTE 中的每个查询并检查其输出。
WITH
CTE_Demands
AS
(
SELECT
D.DemandNumber
,D.Tovar
,ROW_NUMBER() OVER (PARTITION BY D.Tovar ORDER BY D.SortOrder, CA_D.Number) AS rn
FROM
Demands AS D
CROSS APPLY
(
SELECT TOP(D.Amount) Numbers.Number
FROM Numbers
ORDER BY Numbers.Number
) AS CA_D
)
,CTE_Sales
AS
(
SELECT
S.SaleNumber
,S.Tovar
,ROW_NUMBER() OVER (PARTITION BY S.Tovar ORDER BY S.SortOrder, CA_S.Number) AS rn
FROM
Sales AS S
CROSS APPLY
(
SELECT TOP(S.Amount) Numbers.Number
FROM Numbers
ORDER BY Numbers.Number
) AS CA_S
)
SELECT
CTE_Demands.DemandNumber
,CTE_Sales.SaleNumber
,CTE_Demands.Tovar
,COUNT(*) AS Amount
FROM
CTE_Demands
INNER JOIN CTE_Sales ON
CTE_Sales.Tovar = CTE_Demands.Tovar
AND CTE_Sales.rn = CTE_Demands.rn
GROUP BY
CTE_Demands.Tovar
,CTE_Demands.DemandNumber
,CTE_Sales.SaleNumber
ORDER BY
CTE_Demands.DemandNumber
,CTE_Sales.SaleNumber
;
综上所述,通常最好使用过程编程语言在客户端执行此类处理。您仍然需要将 Demands
和 Sales
中的所有行传输到客户端。因此,通过连接服务器上的表,您不会减少必须通过网络传输的字节数。事实上,你增加了它,因为原始行可能被分成几行。
这种处理本质上是顺序的,而不是基于集合的,所以用数组很容易做,但在 SQL 中很棘手。
关于sql - 如何在没有循环/游标的情况下组合两个表来分配销售量与需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377023/
您能否提供有关网站社交网络(例如 Facebook)类型(功能性、非功能性和用户要求)要求的示例? 提前谢谢 最佳答案 以下是 Facebook 应具备的要求的一些示例。然而,值得一提的是:对于每种类
我需要在另一个 Java 项目的 liferay 模块项目中使用一些类。我正在使用 gradle,当我部署应用程序时,即使 gradle 编译了我的 jar 文件,我也会收到 Unresolved 需
我最近发现了类似于button.setText(“Hello World”);的代码行如果您按如下方式分配按钮,则 onCreate() 方法中将抛出 nullPointerException: B
我有一些基于成本的供应链管理代码,其中供应尝试满足需求,但这仅在供应大于需求时才有效。有什么方法可以优化它以两种方式工作(即当 supply > demand 和 supply = model.dem
好吧,我快想多了。有没有一种方法可以组合接口(interface)和属性,使实现类中的特性属性满足接口(interface)契约? 在我的应用程序中,我想显示一个事件列表,它是系统中事件的集合,例如新
我想创建一个模型,在每个步骤中预测每个产品在多周内的 future 需求(预测每个产品明年的每周需求) 我有一些小尺寸(大约 100-200 条记录)的 csv。 这里有关 CSV 列的信息:- 第一
我有一个包含我所有依赖项的 requirements.txt 文件,但它没有被正确处理: pip install -r requirements.txt 后,我得到以下 pip freeze: arg
我对 Java EE 应用程序的性能测量(CPU 和磁盘 I/O 需求)很感兴趣。 对于CPU 我已经想出了如何测量每个方法调用的CPU 需求。通过在每个方法的开始和结束时调用 java.lang.m
如何获取从 yaml 文件创建的管道的需求? yaml 文件包含需求: ... jobs: - job: my_job displayName: My Job pool: name:
我的目标: 构建一个 AngularJS 服务 (MapService),它初始化 (MapService.initMap()) 第 3 方控件 (Esri ArcGIS Map) 并返回对我的 ma
我在我的一个项目中使用了 redis,并且有一个带有 redis = Redis.new 的初始化器并使用了 redis gem。问题是,如果 Redis 没有运行,我将无法执行简单的数据库迁移之类的
如果我们有三个模块名称 A、B 和 C,那么模块 A 需要 B 和 B 需要 C:这个调用会产生什么效果? var A = proxyquire('A', {'C': mockedModule}) 模
我正在为 Liferay 7 开发一些功能。我知道仍处于 beta 版本,但我在 OSGi 包依赖项方面遇到了一些麻烦。当我尝试部署服务项目时,部署时发生错误 Unresolved requireme
我有一个 list 文件 partials.js,其中包含: //= require_tree ./partials 然后 ./partials/ 中的每个咖啡文件都包含以下内容: $ -> #
在 brew 中有没有一种方法或特殊命令可以将安装的包卡住到 requirements.txt 文件中,就像在 python 中使用 pip 一样?然后从该文件快速重新安装它们? 最佳答案 使用Hom
我正在尝试在 g1 GKE 实例(g1 实例有 1 个 vCPU,或 1000 毫核)中运行一个小型应用程序,并且在调度 pod 时遇到 CPU 请求限制问题。有 4 个 pod,每个都是应用程序的不
我们计划为我们的 C++ 代码建立柯南存储库。我们只想向开发人员公开依赖项列表 (lib/version@user/channel),而不是我们放在 conanfile.py 中的逻辑检查。这个包装器
我正在尝试研究 Varnish 。 我的问题是。我确实有一个主要请求/响应,我想使用 Varnish 缓存它。 html结构内部有ESI标签。我想要很多。一个标签具有较长的 ttl,其他标签则具有 t
我有一个在运行时或编译/链接时连接接口(interface)的问题或最佳方法。对于我的嵌入式项目,设备驱动程序和 I/O 具有需要绑定(bind)(即粘合)到其相应接口(interface)依赖项的接
我有一个我创建的协议(protocol)(在 Swift 4.2 中),它的要求之一是一个与协议(protocol)本身类型相同的属性。 例如,我有一个这样定义的协议(protocol): proto
我是一名优秀的程序员,十分优秀!