Sql 总和(字段_1)不超过总和(字段_2)

Sql 总和(字段_1)不超过总和(字段_2),sql,tsql,sum,report,Sql,Tsql,Sum,Report,也许有更好的方法可以实现,但我所拥有的是: 环境-Plex ERP-SQL查询编辑器 后端-SQL Server 2012 摘要 基于制造复杂性,零件具有“单位”价值 有时我们会运送零件。其他日子我们没有 零件单位汇总为计划发货的每一天的“Rel_units_Calc” 该工厂每天可获得5台机组的积分(开放时)‘机组倍增器’ 该每日积分为每天“单位容量”的总和 为了防止在一个缓慢的月份出现产能过载,我需要防止工厂在总量(单位产能)超过总量(相对单位计算)时获得5个单位的信用 将创建一个报告,该

也许有更好的方法可以实现,但我所拥有的是:
环境-Plex ERP-SQL查询编辑器
后端-SQL Server 2012

摘要

  • 基于制造复杂性,零件具有“单位”价值
  • 有时我们会运送零件。其他日子我们没有
  • 零件单位汇总为计划发货的每一天的“Rel_units_Calc”
  • 该工厂每天可获得5台机组的积分(开放时)‘机组倍增器’
  • 该每日积分为每天“单位容量”的总和
  • 为了防止在一个缓慢的月份出现产能过载,我需要防止工厂在总量(单位产能)超过总量(相对单位计算)时获得5个单位的信用
  • 将创建一个报告,该报告将使用case语句评估Rel_Units_Calc>Unit_Capcity,然后显示红色或绿色
详细范围

我正在尝试创建一个销售报告,以防止销售团队超载(超过产能)。为了简化,假设我们有3个部分(A、B和C部分)。A部分很简单,相当于1个“单位”。B部分稍微复杂一些,值2个“单位”。C部分是最复杂的,价值5个“单位”。工厂开放后每天可处理5台机组

当一天没有超载时,报告将显示红色和绿色,以显示一天何时超载。任何红色的日子都需要将销售订单移出

我的方法是采用单位*订单数量来给我“释放单位”。然后我在一个名为“Release\u Units\u Calc”的字段中做一个sum(Release\u Units)来显示每天的计数

我有另一个名为“Unit_乘数”的字段,它在符合条件的日子(不包括周末和节假日)提供每天5个单位的积分。然后我做一个求和(单位乘数),在一个名为“单位容量”的字段中显示每天的计数

红色和绿色将通过对比两列Release_Units_Calc和Unit_Capacity来确定。当装置容量=释放装置时,则为绿色,否则为红色

这一切正常,直到你们看到12月,当我们对这些部分有一个减速,然后我们开始银行单位的能力。单位容量字段继续累积每天5个单位,即使超过了发布单位计算。这些零件不是在12月生产的,因此认为20个工作日*每天5个单位在1月1日为我们提供了100个单位,这是不好的。从本质上说,这将导致销售团队在1月份压倒工厂,因为他们将有100个库存单元可供提取

我希望单位容量,同样是一个总和(单位乘数),不超过从总和(释放单位)得出的释放单位计算

SQL语句如下:

此临时表标记了容量应包括的天数

SELECT
   DISTINCT FDPO.FULL_DATE,
   ----case statement below to create an include flag.  It will exclude weekends unless we have a shipment going out
   (CASE WHEN (DATENAME(dw, DATEADD(d,0,FDPO.Full_Date)) NOT IN
        ('Saturday','Sunday')) THEN 1
         WHEN (DATENAME(dw, DATEADD(d,0,FDPO.Full_Date)) IN
        ('Saturday','Sunday')) AND FDPO.DUE_DATE IS NOT NULL THEN 1
    ELSE 0 END) AS 'Include'
INTO #Capacity_Temp1
FROM #FDPO AS FDPO
此临时表使用include标志删除不应累积容量的日期,并添加容量列

SELECT 
    CT1.FULL_DATE,
    @Unit_Multiplier AS 'Unit_multiplier'
INTO #Capacity_Temp2
FROM #Capacity_Temp1 AS ct1
WHERE ct1.INCLUDE= 1
下面的临时表将每天的单位乘数相加

SELECT
DISTINCT CT2.FULL_DATE,
CT2.Unit_multiplier,
SUM(CT2.Unit_multiplier) OVER (Order By CT2.FULL_DATE) AS 'Unit_Capacity'

INTO #Unit_Capacity
FROM #Capacity_Temp2 AS CT2
最终显示查询

SELECT
     RUC.FULL_DATE,
     RUC.Release_Units,
     RUC.Release_Units_Calc,--running talley of the release units
     ISNULL(UC.Unit_multiplier,0) AS 'Unit_multiplier',
           -- credit units given per day except when closed 
     UC.Unit_Capacity --running talley of the unit multiplier
FROM #RUC AS RUC
LEFT JOIN #Unit_Capacity AS UC
   ON UC.FULL_DATE = RUC.FULL_DATE
目前的产出:

╔══════╦═══════════════╦════════════════╦═════════════════╦═══════════════╗
║ DATE ║ Release_Units ║ Rel_Units_Calc ║ Unit_multiplier ║ Unit_Capacity ║
╠══════╬═══════════════╬════════════════╬═════════════════╬═══════════════╣
║ 8/3  ║ 15            ║ 15             ║ 5               ║ 5             ║
║ 8/4  ║ NULL          ║ 15             ║ 5               ║ 10            ║
║ 8/5  ║ 20            ║ 50             ║ 5               ║ 15            ║
║ 8/5  ║ 15            ║ 50             ║ 5               ║ 15            ║
║ 8/6  ║ NULL          ║ 50             ║ 0               ║ NULL          ║
║ 8/7  ║ NULL          ║ 50             ║ 5               ║ 20            ║
║ 8/8  ║ NULL          ║ 50             ║ 5               ║ 25            ║
║ 8/9  ║ NULL          ║ 50             ║ 5               ║ 30            ║
║ 8/10 ║ NULL          ║ 50             ║ 5               ║ 35            ║
║ 8/11 ║ NULL          ║ 50             ║ 5               ║ 40            ║
║ 8/12 ║ 15            ║ 65             ║ 5               ║ 45            ║
║ 8/13 ║ NULL          ║ 65             ║ 0               ║ NULL          ║
║ 8/14 ║ NULL          ║ 65             ║ 5               ║ 50            ║
║ 8/15 ║ NULL          ║ 65             ║ 5               ║ 55            ║
║ 8/16 ║ 10            ║ 75             ║ 5               ║ 60            ║
║ 8/17 ║ NULL          ║ 75             ║ 5               ║ 65            ║
║ 8/18 ║ NULL          ║ 75             ║ 5               ║ 70            ║
║ 8/19 ║ NULL          ║ 75             ║ 0               ║ NULL          ║
║ 8/20 ║ NULL          ║ 75             ║ 0               ║ NULL          ║
║ 8/21 ║ NULL          ║ 75             ║ 5               ║ 75            ║
║ 8/22 ║ NULL          ║ 75             ║ 5               ║ 80            ║
║ 8/23 ║ NULL          ║ 75             ║ 5               ║ 85            ║
║ 8/24 ║ NULL          ║ 75             ║ 5               ║ 90            ║
║ 8/25 ║ NULL          ║ 75             ║ 5               ║ 95            ║
║ 8/26 ║ 10            ║ 95             ║ 5               ║ 100           ║
║ 8/27 ║ 10            ║ 95             ║ 5               ║ 105           ║
╚══════╩═══════════════╩════════════════╩═════════════════╩═══════════════╝
问题发生在8月22日,我们开始超过Rel_Units_Calc字段。这允许在8/27下订单,但不会触发红色,因为单位容量将大于相对单位计算

抱歉发了这么长的邮件。如果有更好的方法来实现这一点,我愿意接受任何建议

提前感谢,

迈克

这篇文章很长。。但我看不到你的总结。但是,如果你需要在求和后限制值,请使用HAVING子句。你建议的逻辑是将库存单位分布在未来的日期?太多的文字无法说明这个故事的简化版本。我想你建议的是单位容量的计算问题。单位容量,但是你不能公开这些信息。谢谢jidexl21。看看现在有没有功能。看起来它可能会起作用。其目的是,一旦工厂赶上机组(当Rel_units_Calc=机组容量时),机组容量将不会累积到5台机组,直到下一个订单完成。下一个订单的下一个订单将增加相对单位计算,允许单位容量增加5个单位。相当长的一段时间。。但我看不到你的总结。但是,如果你需要在求和后限制值,请使用HAVING子句。你建议的逻辑是将库存单位分布在未来的日期?太多的文字无法说明这个故事的简化版本。我想你建议的是单位容量的计算问题。单位容量,但是你不能公开这些信息。谢谢jidexl21。看看现在有没有功能。看起来它可能会起作用。其目的是,一旦工厂赶上机组(当Rel_units_Calc=机组容量时),机组容量将不会累积到5台机组,直到下一个订单完成。下一个订单的下一个订单将增加相对单位计算,允许单位容量增加5个单位。