问题描述
我正在尝试将此数据插入到临时表中 当我添加片段以将第二个结果集#Temp插入到我的临时表中时 我收到不正确的语法错误 有任何想法吗?
-- =============================================
-- Author: <Kaven>
-- Create date: <August 2020>
-- Description: Summary Report of [spRPWipManufactureProcessLogR1]
-- Owner : RpData.dll
-- =============================================
ALTER PROCEDURE [dbo].[spRPWipManufactureProcessLogR2]
@FromDate DATE = null,@ToDate DATE = null,@Location NVARCHAR(15) =null,--Dropdown --CostCentre
@Operation NVARCHAR(15) = NULL,-- Dropdown --WorkCentre
@JobNumber nvarchar(15) = NULL
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN
--EXEC [spRPWipManufactureProcessLogR2] '20200201','20200301'
IF @Operation = ''
BEGIN
SET @Operation = null
END
IF @JobNumber = ''
BEGIN
SET @JobNumber = NULL
END
IF OBJECT_ID(N'tempdb..#Temppp_WarehouseList') IS NOT NULL
BEGIN DROP TABLE #Temppp_WarehouseList END
SELECT StockCode
INTO #Temppp_WarehouseList
FROM CompanyA..InvMaster
DECLARE
@wh_List NVARCHAR(1000),@wh_List2 NVARCHAR(1000)
SELECT @wh_List = STUFF((SELECT ',['+l.Warehouse+' QtyOnHand]' FROM CompanyA..InvWhControl l WHERE l.Warehouse IS NOT NULL FOR XML PATH('')),1,'')
SELECT @wh_List2 = STUFF((SELECT ',['+l.Warehouse+' QtyOnorder]' FROM CompanyA..InvWhControl l WHERE l.Warehouse IS NOT NULL FOR XML PATH('')),'')
--SELECT @wh_List
--SELECT @wh_List2
SELECT ProductID,FromDate,ToDate,QtyBUoM
INTO #TempBuOM
FROM Cetus.dbo.SMDemandForcastDailyHierarchy df
JOIN dbo.SMDemandSourceTypeDef st ON st.pkDFSourceTypeID = df.fkSourceType
WHERE
df.DemandSource = st.pkDFSourceTypeID
AND
df.Parent = st.pkDFSourceTypeID
AND FromDate <= GETDATE()
AND ToDate >= GETDATE()
SELECT * FROM #TempBuOM
SELECT * FROM #Temppp_WarehouseList t
INNER join
(SELECT * FROM
(SELECT Warehouse+' QtyOnHand' 'WarehouSEOnHand',Warehouse+' QtyOnorder' 'WarehouSEOnorder',QtyOnHand,QtyOnorder,b.CostCentre AS 'Location',--b.WorkCentre AS [Operation],-- arc.Job AS [Job Number],--FORMAT(CAST(CAST(s.Event AS XML).value('(/OperationTrackingLog/TimeStamp)[1]','varchar(max)') AS DATETIME),'HH:mm:ss') AS [Operation Compeleted Time],-- CONVERT(VARCHAR,FORMAT(CAST(CAST(s.Event AS XML).value('(/OperationTrackingLog/TimeStamp)[1]','yyyy/MM/dd'),100) AS [Operation Compeleted Date],-- CONVERT(Date,CONVERT(date,arc.DTComplete))AS [Compeleted Date],df.ProductID AS 'Product ID',m.Description AS 'Stock Code DESCRIPTION',arc.QtyTomake AS 'Quantity To Make',arc.QtyManufactured 'Quantity Manufactured',df.QtyBUoM AS 'Daily Demand',inv.QtyOnorder AS 'Quantity On Order',inv.QtyOnHand AS 'Stock Levels'
INTO #TEMP -- Error comes here
FROM Cetus..WIPManufactureProcessLog s
LEFT JOIN WIP..WipMaster_Arc arc ON s.JobId = arc.Job
JOIN CompanyA..InvMaster m ON arc.StockCode = m.StockCode
JOIN CompanyA..InvWarehouse inv ON m.StockCode = inv.StockCode
JOIN CompanyA.dbo.BomOperations bo ON m.StockCode = bo.StockCode AND bo.Operation = s.Operation
JOIN CompanyA..BomWorkCentre b ON bo.WorkCentre = b.WorkCentre
JOIN [dbo].SMDemandForcastDailyHierarchy df ON m.StockCode = df.ProductID
JOIN dbo.SMDemandSourceTypeDef st ON st.pkDFSourceTypeID = df.fkSourceType
--EXEC [spRPWipManufactureProcessLogR2] '20190101','20200201'
Where CONVERT(VARCHAR,100)
BETWEEN ISNULL(@FromDate,CONVERT(VARCHAR,100))
AND ISNULL(@ToDate,100))
--WHERE FORMAT(CAST(CAST(s.Event AS XML).value('(/OperationTrackingLog/TimeStamp)[1]','HH:mm:ss') >= '2020-02-01'
--AND FORMAT(CAST(CAST(s.Event AS XML).value('(/OperationTrackingLog/TimeStamp)[1]','HH:mm:ss') <= '2020-03-01 '
AND m.WarehousetoUse <>'AA'
AND b.WorkCentre = ISNULL(@Location,b.WorkCentre )
AND b.CostCentre = ISNULL(@Operation,b.CostCentre )
AND arc.Job = ISNULL(@JobNumber,arc.Job) )p
PIVOT (
SUM(QtyOnHand) FOR WarehouSEOnHand IN
([BB QtyOnHand],[16 QtyOnHand],[IS QtyOnHand],[MS QtyOnHand],[MH QtyOnHand],[AA QtyOnHand],[BC QtyOnHand],[PH QtyOnHand],[P4 QtyOnHand],[PL QtyOnHand],[CC QtyOnHand],[SR QtyOnHand],[TS QtyOnHand],[WW QtyOnHand])) AS pvt
PIVOT
(SUM(QtyOnorder) FOR WarehouSEOnorder IN
([BB QtyOnorder],[16 QtyOnorder],[IS QtyOnorder],[MS QtyOnorder],[MH QtyOnorder],[AA QtyOnorder],[BC QtyOnorder],[PH QtyOnorder],[P4 QtyOnorder],[PL QtyOnorder],[CC QtyOnorder],[SR QtyOnorder],[TS QtyOnorder],[WW QtyOnorder])) AS pvt2 GROUP BY )
AS z on t.StockCode = z.[Product ID]
```sql```
解决方法
编辑:添加了答案,以防#TEMP表具有内部查询而不是最终数据透视结果。
请注意,此处提供的“代码”用于显示结构-您需要从上方添加文本板,然后像往常一样对它们进行错误修复。下面是演示如何解决此问题的方法。
INTO #TEMP在FROM语句的中间(实际上不是最终选择),因此不起作用。
如果要将最终结果(例如,来自数据透视表的结果)存储在temp表中,请删除当前的“ INTO #TEMP”并将其放入外部查询中,例如,
SELECT *
INTO #TEMP
FROM (your whole pivot statement) AS a
或使用CTE
; WITH CTE AS
(your whole pivot statement)
SELECT *
INTO #Temp
FROM CTE
另一方面,如果您要将内部查询的结果(不是不是枢轴)存储在临时表中,则
- 首先运行该关键字(例如,将您在那里的内部查询提取到自己的语句中)
- 在更大的查询中使用#temp表
-- Initial creation of temp table (SQL extracted from your current code)
SELECT Warehouse+' QtyOnHand' (... and rest of fields)
INTO #Temp
FROM Cetus..WIPManufactureProcessLog s
(... and rest of from,and where clauses)
-- And then use that in your pivot
SELECT *
FROM
(SELECT *
FROM #Temppp_WarehouseList t
INNER join #TEMP ON (... matching fields)
) p
PIVOT
(pivot commands etc)