「USE [SAPL_BK_NEW] GO /******對象不允許/ 2016 10時32分48秒******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --exec MachineCTE 'AQUARELL'子查詢返回了多個值。 !StoredProcedure的[DBO] [MachineCTE]腳本日期:11/12這是當子查詢如下=,=,<, <= , >,> =
ALTER PROC [DBO]。[MachineCTE] ( @companyName varchar(100) ) AS BEGIN
CREATE TABLE #MachineCTE ( ID INT, mcdesp VARCHAR(最大), mccost INT, mcopsts VARCHAR(30), 國家VARCHAR(100), mcfact VARCHAR(50), mccomp VARCHAR(60) );
WITH Machine_CTE(ID,mcdesp,mccost,mcopsts,國家,mcfact,mccomp) AS(SELECT ROW_NUMBER)OVER(ORDER BY mcdesp ASC(), mac.mcdesp機器,計數(mac.mccost)作爲成本,計數(mcopsts)爲條件,mcopsts爲[國家] mcfact,mccomp 與機器的MAC
其中RTRIM(mac.mccomp)= @的companyName GROUP BY mcdesp,mcopsts,mcfact,mccomp)
INSERT INTO #MachineCTE select Machine_CTE select ID,mcdesp,mccost,mcopsts,State,mcfact,mccomp
select * from(SELECT CTE.mcde sp as Machines_Name, SUM(CTE.mccost)as Total_Machines, ISNULL((SELECT mcopsts FROM #MachineCTE MCTE WHERE State ='GOOD'and MCTE.mcdesp = CTE.mcdesp),0)AS [GOOD], ISNULL( (SELECT mcopsts FROM #MachineCTE MCTE WHERE State ='IDLE'and MCTE.mcdesp = CTE.mcdesp),0)AS [IDLE], ISNULL((SELECT mcopsts FROM #MachineCTE MCTE WHERE State ='UR'and MCTE.mcdesp = CTE.mcdesp),0)AS [UR] FROM #MachineCTE CTE GROUP BY mcdesp)T1 UNION ALL SELECT * FROM (SELECT CTE.mcdesp如Machines_Name, '0' 作爲Total_Machines, '0' AS [GOOD], '0'AS [IDLE], '0'AS [UR] FROM #MachineCTE CTE where mcf ACT = '額外' GROUP BY mcdesp,mccomp,mcopsts,mcfact)T2
DROP TABLE #MachineCTE
END」
請幫忙解決這個問題
選擇 CTE.mcdesp爲Machines_Name, SUM(CTE.mccost)作爲Total_Machines, ISNULL((SELECT mcopsts FROM #MachineCTE MCTE WHERE狀態= '好' 和MCTE.mcdesp = CTE.mcdesp),0)AS [GOOD], ISNULL((SELECT mcopsts FROM #MachineCTE MCTE WHERE State ='IDLE'和MCTE.mcdesp = CTE。 mcdesp),0)AS [IDLE], ISNULL((SELECT mcopsts FROM #MachineCTE MCTE WHERE State ='UR'and MCTE.mcdesp = CTE。mcdesp),0)AS [UR] FROM #MachineCTE CTE GROUP BY mcdesp
上面的語句是問題
子查詢返回大於1倍的值。這是當子查詢跟隨不允許=,!=,<,< =,>,> =,或當子查詢用作表達
它*應該是不言自明的,其中一個子查詢('SELECT mcopsts FROM #MachineCTE MCTE WHERE State ='GOOD'and MCTE.mcdesp = CTE.mcdesp')返回多個值。最簡單的解決方法是在子查詢中選擇'SELECT TOP'。 –
爲了擴展EBrown已經說過的內容:如果在select子句中有一個子查詢,那麼該子查詢最多可以返回**一行**。否則,你會得到你得到的錯誤。要麼確保子查詢(子查詢)最多隻返回一行,要麼用連接重寫查詢以適應返回的多行。 –
請在SO上閱讀[此問題](http://stackoverflow.com/q/2653188/243373)並研究發佈在那裏的答案。你應該能夠解決這個問題,並在那裏發佈答案。 –