![](/img/trans.png)
[英]SQL-Server: How do I insert multiple rows with data from a temp table + store the ID of the inserted rows in the temp table
[英]Could not insert into temp table from WITH ROWS AS clause in SQL Server
我想插入由該查詢返回的結果:
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
結果是: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
編輯:這為我工作
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
您的語法錯誤-如果您要從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)
有關CTE語法及其使用方法的詳細信息,請參閱正式的Microsoft文檔 。
更新:如果該目標臨時表尚不存在,請使用以下語法:
; WITH rows AS
( ..... )
SELECT (list of columns)
INSERT INTO #tempTest
FROM rows
WHERE (conditions)
不僅語法錯誤,而且邏輯也不是很好。 只需使用lag()
:
INSERT INTO #tempTest
SELECT DATEDIFF(minute, LAG(fs.[発生時刻]) OVER (ORDER BY [発生時刻]), fs.[発生時刻])
FROM [PROC_MN].[dbo].[TBL_FINISH_STATUS] fs
WHERE PO_NO = 'GV12762' AND
発生時刻 >= '2018-03-16' AND
発生時刻 < '2018-03-18' AND
[加工內容] = 'Bonding';
筆記:
BETWEEN
與日期一起使用,尤其是當它們有時間時。 您可以參考Aaron Bertrand的這篇非常有用的博客文章。 NULL
,則可以使用子查詢或CTE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.