sql-server - 返回余额低于阈值的所有记录
问题描述
我正在尝试设置一个查询以返回所有未结余额低于某个阈值(例如 5%)的订单行项目。我毫无顾虑地管理了这个查询,但有一个复杂的问题。我只想在没有任何订单项超出此阈值的情况下退回这些订单项。
例如,如果行项目 1 的订购数量为 100,并且已收到 98,则此行项目将被退回,除非有订单数量为 100 和收到 50 的行项目 2(因为这高于 5%临界点)。
这可能比解释更容易演示,所以我设置了一个简化的 SQL Fiddle 来展示我到目前为止所拥有的。我正在使用 CTE 添加余额字段,然后在我的阈值内进行查询。我很感激任何建议
在小提琴示例中,不应返回 OrderNum 987654,因为该订单有第二个订单项,剩余 50%。
;WITH cte as (
SELECT
h.OrderNum
,d.ItemNumber
,d.OrderedQty
,d.ReceivedQty
,100.0 * (1 - (CAST(d.ReceivedQty as Numeric(10, 2)) / d.OrderedQty)) as RemainingBal
FROM OrderHeader h
INNER JOIN OrderDetail d
ON h.OrderNum = d.OrderNum
)
SELECT * FROM Cte
WHERE RemainingBal >0 and RemainingBal <= 5.0
解决方案
我得到这个工作...
;WITH cte as (
SELECT
h.OrderNum
,d.ItemNumber
,d.OrderedQty
,d.ReceivedQty
,100.0 * (1 - (CAST(d.ReceivedQty as Numeric(10, 2)) / d.OrderedQty)) as
RemainingBal
FROM OrderHeader h
INNER JOIN OrderDetail d
ON h.OrderNum = d.OrderNum
)
SELECT * FROM Cte WHERE OrderNum IN(
SELECT OrderNum
FROM Cte
GROUP BY OrderNum
HAVING CAST((SUM(OrderedQty)) - (SUM(ReceivedQty)) AS
DECIMAL(10,2))/CAST(SUM(OrderedQty) AS DECIMAL(10,2)) <= .05
)
推荐阅读
- html - 从 url 拖放到输入文件
- python - 如何在 Python 3.6 上使用 conda 或 pip 安装 pygraphviz?
- c# - Posting a message box when database records are added, or when an exception is generated
- php - 如何使用 PHP 注释记录 WordPress 主题/插件的过滤器/操作
- db2 - SELECT * INTO newtable 不起作用
- java - 使用 Cloudera 5.14 和 Spark2 配置 Livy:Livy 找不到自己的 JAR 文件
- java - 将函数添加到另一个包中包含的类
- java - 来自 Angular5 的 PUT 请求到 spring-boot
- php - 如何在面向对象的php中在Restapi中发送json响应
- c# - 是否要向数据网格添加列和行?