这个问题在这里已有答案:
我有代码根据它们的长度分割几个月的记录,代码目前工作没有问题,但我需要计算这些新记录之间经过多少天,所以我可以得到这样的东西:
id begdate enddate days newbeg newend
---------------------------------------------------------
123 03/04/2018 03/05/2018 31 03/04/2018 30/04/2018
123 03/04/2018 03/05/2018 31 01/04/2018 03/04/2018
我需要展示什么
id begdate enddate days newbeg newend days2
---------------------------------------------------------------
123 03/04/2018 03/05/2018 31 03/04/2018 30/04/2018 28
123 03/04/2018 03/05/2018 31 01/04/2018 03/04/2018 4
在我的代码中,我创建了一个从here取得的CTE来分割行,在最后的选择中我使用DATEDIFF
for newbeg和newend但是我得到了Error 207, Level 16, State 1, Procedure xx
,因为newbeg
和newend
在桌面上无效
;WITH n(n) AS
--first select goes here
(
--SECOND SELECT
)
SELECT
--COLUMNS FROM ORIGINAL TABLE
--DISP NEW COL
BEGDATE = f, ENDDATE = t,
--SPLITTED COL
NEWBEG = CASE n WHEN 0 THEN f ELSE bp END,
NEWEND = CASE n WHEN md THEN t ELSE ep END,
--CALC NEW PERDIODS WHERE I GET Msg 207
DATEDIFF(dd, NEWBEG, NEWEND) as DAYS2
FROM
d
WHERE
md >= n
ORDER BY
BEGDATE, NEWBEG;
也许这不是合适的方法,或者我做错了什么,提前感谢任何帮助。
只需使用另一个CTE:
WITH n(n) AS (
--first select goes here
),
d as (
--SECOND SELECT
),
e as (
SELECT --COLUMNS FROM ORIGINAL TABLE
--DISP NEW COL
BEGDATE = f, ENDDATE = t,
--SPLITTED COL
NEWBEG = CASE n WHEN 0 THEN f ELSE bp END,
NEWEND = CASE n WHEN md THEN t ELSE ep END
FROM d
WHERE md >= n
)
SELECT e.*,
--CALC NEW PERDIODS WHERE I GET Msg 207
datediff(day, NEWBEG, NEWEND) as DAYS2
FROM e
ORDER BY BEGDATE, NEWBEG;