2016-08-15 57 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 
内容

不是只返回一个,我认为它返回多个值,检查所有查询上面的那个外观 像那样。我确定这是给你错误的原因。