use*_*133 1 sql t-sql sql-server common-table-expression
我想插入一个由此查询返回的结果:
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
FROM [PROC_MN].[dbo].[TBL_FINISH_STATUS]
where PO_NO='GV12762' and ???? BETWEEN '2018/03/16' AND '2018/03/18' AND [????]='Bonding'
)
SELECT DATEDIFF(minute, mc.[????], mp.[????])
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
Run Code Online (Sandbox Code Playgroud)
结果是:91
我使用此查询但不能,请帮忙!
IF OBJECT_ID('tempdb..#tempTest') IS NOT NULL
DROP TABLE #tempTest
Insert into #tempTest
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
FROM [PROC_MN].[dbo].[TBL_FINISH_STATUS]
where PO_NO='GV12762' and ???? BETWEEN '2018/03/16' AND '2018/03/18' AND [????]='Bonding'
)
SELECT DATEDIFF(minute, mc.[????], mp.[????])
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
Run Code Online (Sandbox Code Playgroud)
编辑:这个适合我
If(OBJECT_ID('tempdb..#temp') Is Not Null)
Begin
Drop Table #Temp
End
create table #Temp
(
OptTime int
)
;WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
FROM [PROC_MN].[dbo].[TBL_FINISH_STATUS]
where PO_NO='GV12762' and ???? BETWEEN '2018/03/16' AND '2018/03/18' AND [????]='Bonding'
)
INSERT INTO #Temp
SELECT DATEDIFF(minute, mc.[????], mp.[????])
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
Run Code Online (Sandbox Code Playgroud)
您的语法错误 - 如果要从CTE插入,请执行以下操作:
; WITH rows AS
(
SELECT
*, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
FROM
[PROC_MN].[dbo].[TBL_FINISH_STATUS]
WHERE
PO_NO = 'GV12762'
AND ???? BETWEEN '2018/03/16' AND '2018/03/18'
AND [????] = 'Bonding'
)
INSERT INTO #tempTest
SELECT (list of columns)
FROM rows
WHERE (conditions)
Run Code Online (Sandbox Code Playgroud)
有关CTE语法及其使用方法的详细信息,请参阅官方Microsoft Docs
更新:如果该目标临时表尚不存在 - 请使用以下语法:
; WITH rows AS
( ..... )
SELECT (list of columns)
INSERT INTO #tempTest
FROM rows
WHERE (conditions)
Run Code Online (Sandbox Code Playgroud)