2016-08-15 58 views
0
CREATE TABLE #TEMP (Date NVARCHAR(256),Pending NVARCHAR(256),Complete NVARCHAR(256) ,Total NVARCHAR(256)); 
INSERT INTO #TEMP (Date,Pending,Total) 
SELECT DISTINCT(DATEE),'','' from E_R_MainT 
GROUP BY DATEE 

UPDATE #TEMP 
SET Pending=(SELECT COUNT(R_ID) FROM E_R_MainT WHERE STATUS !='S_2' GROUP BY (CONVERT(char(10), HOD_DT ,126))) 
WHERE #TEMP.Date = (SELECT DISTINCT(DATEE) from E_R_MainT 
GROUP BY DATEE) 

UPDATE #TEMP 
SET Complete=(SELECT COUNT(R_ID) FROM E_R_MainT WHERE STATUS !='S_1' GROUP BY DATEE) 
WHERE #TEMP.Date = (SELECT DISTINCT(DATEE) from E_R_MainT 
GROUP BY DATEE) 

UPDATE #TEMP 
SET Total=(SELECT COUNT(R_ID) FROM E_R_MainT GROUP BY (DATEE)) 
WHERE #TEMP.Date = (SELECT DISTINCT(DATEE) from E_R_MainT 
GROUP BY DATEE 
SELECT * FROM #TEMP 

當執行我查詢我得到這個錯誤:SQL插入#TEMP表

「子查詢返回的多個值,這是不允許」

下面

是我的表源: enter image description here

我期待這樣的輸出: enter image description here

+0

s_1 =掛起,s_2 =完成 – KyLim

+0

手動檢查子查詢,它應該不僅返回一個值,而且只更新一行中的一個值。 –

回答

1

一些容易混淆的命名會在這裏等,我懷疑實際上,您的查詢部分中出現的幾個不同名稱意在命名相同的列。

不應該有必要在這裏臨時表 - 只要使用合適的集合體:

SELECT 
    DATEE, 
    SUM(CASE WHEN Status = 's_1' THEN 1 ELSE 0 END) as Pending, 
    SUM(CASE WHEN Status = 's_2' THEN 1 ELSE 0 END) as Complete, 
    COUNT(*) 
FROM E_R_MainT 
GROUP BY DATEE 
0

這部分導致問題出現的你..

WHERE #TEMP.Date = (SELECT DISTINCT(DATEE) from E_R_MainT 
GROUP BY DATEE) 

變化to..below,沒有必要的獨特和group by

WHERE #TEMP.Date in (SELECT (DATEE) from E_R_MainT 
+0

嗨,我試着你給的代碼,不工作,不幸的是,同樣的錯誤 – KyLim

+0

這是我根據你的查詢給你修改的樣本 – TheGameiswar

0

此示例代碼從您:

UPDATE #TEMP 
SET Total=(SELECT COUNT(R_ID) FROM E_R_MainT GROUP BY (DATEE)) 
WHERE #TEMP.Date = (SELECT DISTINCT(DATEE) from E_R_MainT 
GROUP BY DATEE 
SELECT * FROM #TEMP 

SELECT COUNT(R_ID) FROM E_R_MainT GROUP BY (DATEE)) 
WHERE #TEMP.Date = (SELECT DISTINCT(DATEE) from E_R_MainT 
GROUP BY DATEE 
內容

不是隻返回一個,我認爲它返回多個值,檢查所有查詢上面的那個外觀 像那樣。我確定這是給你錯誤的原因。