我有一段脚本,可以告诉我“按时交付”或“OTD”基于当月的情况。从本质上讲,它立即告诉我们是否在我们的承诺日期之前或之后运送了我们的材料。如何按月份对数据结果进行分组
我现在要做的是创建一个新脚本,将其与我们的GLPERIODS表绑定,以便我可以一目了然地显示每年的“OTD”是什么。当我运行这个新的时候,我得到正确的时期(1月 - 12月),但我的OTD计算没有按期间分组。相反,它们都是相同的,我认为它是我们系统中所有数据的平均值。
我会在这里发布脚本以及结果。 (编辑:我想我不能发布结果,因为它不会让我发布图片)任何帮助将不胜感激。谢谢,顺便说一句,我不是程序员,只是偶尔从事这些工作的人来获取我们之后的数据。
Select "month",
OTD
From (Select Round((1 - ("Late"/"All")), 3) As OTD
From (Select Round(Count(V_RELEASES_COMB.ACTUAL_SHIPDATE), 2) As "Late"
From V_RELEASES_COMB,
GLPERIODS
Where To_Char(V_RELEASES_COMB.ACTUAL_SHIPDATE, 'MM/YYYY') =
To_Char(GLPERIODS.START_DATE, 'MM/YYYY') And
V_RELEASES_COMB.ACTUAL_SHIPDATE > V_RELEASES_COMB.PROMISE_DATE And
V_RELEASES_COMB.ITEMNO Is Not Null And V_RELEASES_COMB.CUMM_SHIPPED > 0),
(Select Case
When Round(Count(V_RELEASES_COMB.ACTUAL_SHIPDATE), 2) = 0 Then 1
Else Round(Count(V_RELEASES_COMB.ACTUAL_SHIPDATE), 2) End As "All"
From V_RELEASES_COMB,
GLPERIODS
Where To_Char(V_RELEASES_COMB.ACTUAL_SHIPDATE, 'MM/YYYY') =
To_Char(GLPERIODS.START_DATE, 'MM/YYYY') And V_RELEASES_COMB.ITEMNO Is Not
Null And V_RELEASES_COMB.CUMM_SHIPPED > 0)),
(Select To_Char(GLPERIODS.START_DATE, 'MONTH') As "month"
From GLPERIODS
Where Extract(Year From GLPERIODS.START_DATE) = Extract(Year From SysDate))
好的,谢谢你的帮助!这里是你的输入编辑的脚本中加入:
Select "month",
OTD
From (Select trunc(g.start_date, 'Month') mth,
round (1 - (count(
case when v.ACTUAL_SHIPDATE > v.PROMISE_DATE And v.ITEMNO Is Not Null
And v.CUMM_SHIPPED > 0 then V.ACTUAL_SHIPDATE end)
/greatest(Count(
case when v.ITEMNO Is Not Null And v.CUMM_SHIPPED > 0 then V.ACTUAL_SHIPDATE end
), 1)) , 3) OTD
from glperiods g
left join v_releases_comb v
on trunc(v.ACTUAL_SHIPDATE, 'Month') = trunc(g.start_date, 'Month')
group by trunc(g.start_date, 'Month')),
(Select To_Char(GLPERIODS.START_DATE, 'MONTH') As "month"
From GLPERIODS
Where Extract(Year From GLPERIODS.START_DATE) = Extract(Year From SysDate))
结果看起来很有前途,但这里所发生的事情:
月OTD 一月0.956 月.875 月0.359 1月1日 1月1日 年1月1日 0.978 月.562 月.875 2月1日 2月1日
等 这个持续了所有月份。
以上是表格格式,但我不知道如何在此网站上发布表格。我希望我只能上传一张照片,但它不会让我。
除了上述信息,我添加到我的帖子,我发现,如果我通过代码删除组,我得到一个有12个月的好桌子。问题在于所有12个月的OTD值都是一样的。如果我通过代码离开团队,我会得到约1月60日,2月60日等,虽然他们似乎有一些不同的OTD值。 – 2015-04-02 19:01:05
不要删除GROUP BY :)不要再为GLPERIODS添加子查询:)它会产生交叉连接,您将有许多不必要的行。只需运行我的查询,我几乎没有修改它,只为当前年份日期添加'WHERE'子句。 – 2015-04-02 19:06:16
哦,你是一个天才。这工作!如果没有数据,是否有办法使OTD值为零(0)?现在它显示一个1.再次感谢你! – 2015-04-02 19:12:14