Sql . 你太棒了。你能解释一下的意思吗?然后在INVOUTDATE的星期天,你能解释一下的意思吗?我想这是没用的。很抱歉,我把它拿走了。真高兴!我终于明白问题出在哪里了!您有数千行[DOCKETNO]=NULL,但是[ORDERDATE]和[INVOUTDAT
Sql . 你太棒了。你能解释一下的意思吗?然后在INVOUTDATE的星期天,你能解释一下的意思吗?我想这是没用的。很抱歉,我把它拿走了。真高兴!我终于明白问题出在哪里了!您有数千行[DOCKETNO]=NULL,但是[ORDERDATE]和[INVOUTDAT,sql,sql-server,vba,sql-server-2008,average,Sql,Sql Server,Vba,Sql Server 2008,Average,. 你太棒了。你能解释一下的意思吗?然后在INVOUTDATE的星期天,你能解释一下的意思吗?我想这是没用的。很抱歉,我把它拿走了。真高兴!我终于明白问题出在哪里了!您有数千行[DOCKETNO]=NULL,但是[ORDERDATE]和[INVOUTDATE]不同,因此,问题是:如何处理?它们的顺序相同吗?是否按日期对其进行分组?是的,对其进行分组也是为了提取唯一值,但您共享的qry首先提取唯一值,然后计算提前期,然后计算提前期的平均值,但每次它都给我相同的输出,即使我更改了日期,并且输出为1.
. 你太棒了。你能解释一下
的意思吗?然后在INVOUTDATE
的星期天,你能解释一下的意思吗?我想这是没用的。很抱歉,我把它拿走了。真高兴!我终于明白问题出在哪里了!您有数千行[DOCKETNO]=NULL
,但是[ORDERDATE]
和[INVOUTDATE]
不同,因此,问题是:如何处理?它们的顺序相同吗?是否按日期对其进行分组?是的,对其进行分组也是为了提取唯一值,但您共享的qry首先提取唯一值,然后计算提前期,然后计算提前期的平均值,但每次它都给我相同的输出,即使我更改了日期,并且输出为1.24因此,我先用不同的卷宗号计算提前期,然后从S表中选择提前期列,然后使用从D计算该提前期的平均值。谢谢,这将在将来帮助我。你只是gr8。仅凭你的逻辑,这是可能的。我很高兴能对你有所帮助:)
SELECT
Round(AVG(CAST(
Case when CONVERT(datetime, ORDERDATE, 105) = CONVERT(datetime, INVOUTDATE, 105) THEN 0 else
Case when CONVERT(datetime, ORDERDATE, 105) + 1 = CONVERT(datetime, INVOUTDATE, 105) THEN 1 else
(DATEDIFF(dd, CONVERT(datetime, ORDERDATE, 105), CONVERT(datetime, INVOUTDATE, 105)))
-(DATEDIFF(wk, CONVERT(datetime, ORDERDATE, 105), CONVERT(datetime, INVOUTDATE, 105))*1)
-(CASE WHEN DATENAME(dw, CONVERT(datetime, ORDERDATE, 105)) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, CONVERT(datetime, INVOUTDATE, 105)) = 'Sunday' THEN 0 ELSE 0 END) end end AS FLOAT)),4) AS LEADTIME FROM DSORDERSTATUS
WHERE ORDERTYPE <> 'Exchange Order'
AND CONVERT(datetime, ORDERDATE, 105) between '20170801' and '20170831'
AND CONVERT(datetime, INVOUTDATE, 105) IS NOT NULL
SELECT DISTINCT DOCKETNO,
Case when CONVERT(datetime, ORDERDATE, 105) = CONVERT(datetime, INVOUTDATE, 105) THEN 0 else
Case when CONVERT(datetime, ORDERDATE, 105) + 1 = CONVERT(datetime, INVOUTDATE, 105) THEN 1 else
(DATEDIFF(dd, CONVERT(datetime, ORDERDATE, 105), CONVERT(datetime, INVOUTDATE, 105)))
-(DATEDIFF(wk, CONVERT(datetime, ORDERDATE, 105), CONVERT(datetime, INVOUTDATE, 105))*1)
-(CASE WHEN DATENAME(dw, CONVERT(datetime, ORDERDATE, 105)) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, CONVERT(datetime, INVOUTDATE, 105)) = 'Sunday' THEN 0 ELSE 0 END) end end AS LEADTIME FROM DSORDERSTATUS
WHERE ORDERTYPE <> 'Exchange Order'
AND CONVERT(datetime, ORDERDATE, 105) between '20170801' and '20170831'
AND CONVERT(datetime, INVOUTDATE, 105) IS NOT NULL
WHERE ORDERTYPE <> 'Exchange Order'
AND CONVERT(date, ORDERDATE, 105) between '20170801' and '20170831'
AND CONVERT(date, INVOUTDATE, 105) IS NOT NULL
;with
S AS (
select DOCKETNO, ORDERDATE, INVOUTDATE, COUNT(*) n
from DSORDERSTATUS where ORDERTYPE <> 'Exchange Order'
group by DOCKETNO, ORDERDATE, INVOUTDATE
),
D as (
select [DOCKETNO], [ORDERDATE], [INVOUTDATE],
DATEDIFF(dd, CONVERT(date, [ORDERDATE], 105), CONVERT(date, [INVOUTDATE], 105)) dd,
DATEDIFF(wk, CONVERT(date, [ORDERDATE], 105), CONVERT(date, [INVOUTDATE], 105)) wk,
CASE WHEN DATEPART(dw, CONVERT(datetime, ORDERDATE, 105)) = 7 THEN 1 ELSE 0 END IsSundayOrd,
CASE WHEN DATEPART(dw, CONVERT(datetime, INVOUTDATE, 105)) = 7 THEN 1 ELSE 0 END IsSundayInv
from S
)
select avg(cast(dd - case when dd>1 then (wk + IsSundayOrd + IsSundayInv) else 0 end as float)) leadtime
from D
where CONVERT(date, ORDERDATE, 105) between '20170801' and '20170831'
AND CONVERT(date, INVOUTDATE, 105) IS NOT NULL
;with
S AS (
SELECT DISTINCT DOCKETNO,
Case when CONVERT(datetime, ORDERDATE, 105) = CONVERT(datetime, INVOUTDATE, 105) THEN 0 else
Case when CONVERT(datetime, ORDERDATE, 105) + 1 = CONVERT(datetime, INVOUTDATE, 105) THEN 1 else
(DATEDIFF(dd, CONVERT(datetime, ORDERDATE, 105), CONVERT(datetime, INVOUTDATE, 105)))
-(DATEDIFF(wk, CONVERT(datetime, ORDERDATE, 105), CONVERT(datetime, INVOUTDATE, 105))*1)
-(CASE WHEN DATENAME(dw, CONVERT(datetime, ORDERDATE, 105)) = 'Sunday' THEN 1 ELSE 0 END)end end AS LEADTIME FROM DSORDERSTATUS
WHERE ORDERTYPE <> 'Exchange Order'
AND CONVERT(datetime, ORDERDATE, 105) between '20170801' and '20170808'
AND CONVERT(datetime, INVOUTDATE, 105) IS NOT NULL
),
D AS (
SELECT DOCKETNO, LEADTIME FROM S
)
SELECT AVG(CAST(LEADTIME AS FLOAT)) FROM D