在sql中复制临时表中的数据
我想从其他表复制临时数据中的数据在sql中复制临时表中的数据,sql,sql-server,Sql,Sql Server,我想从其他表复制临时数据中的数据 CREATE TABLE #temp1 ( Question_ID INT ,Excellent INT ,Good INT ,Average INT ,Below_Average INT ,Poor INT ) INSERT INTO #temp1 VALUES ( ( SELECT Question_ID FROM Eval GROUP BY Q
CREATE TABLE #temp1 (
Question_ID INT
,Excellent INT
,Good INT
,Average INT
,Below_Average INT
,Poor INT
)
INSERT INTO #temp1
VALUES (
(
SELECT Question_ID
FROM Eval
GROUP BY Question_ID
)
,(
SELECT COUNT(Answer_Marks) AS "Excellent"
FROM Eval
WHERE Answer_Marks = 5
AND Emp_no = 'biit218'
GROUP BY Question_ID
)
,(
SELECT COUNT(Answer_Marks) AS "Good"
FROM Eval
WHERE Answer_Marks = 4
AND Emp_no = 'biit218'
GROUP BY Question_ID
)
,(
SELECT COUNT(Answer_Marks) AS "Average"
FROM Eval
WHERE Answer_Marks = 3
AND Emp_no = 'biit218'
GROUP BY Question_ID
)
,(
SELECT COUNT(Answer_Marks) AS "Baverage"
FROM Eval
WHERE Answer_Marks = 2
AND Emp_no = 'biit218'
GROUP BY Question_ID
)
,(
SELECT COUNT(Answer_Marks) AS "poor"
FROM Eval
WHERE Answer_Marks = 1
AND Emp_no = 'biit218'
GROUP BY Question_ID
)
)
每个子查询都应该复制临时表中的15条记录,但它返回一个错误:
Msg 512,16级,状态1,第1行
子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。声明已终止
您需要使用INSERT INTO。。。选择从开始执行插入。您当前的语法无法工作,因为您正试图将多行插入到单个列中。如果您使用这样的子查询,它应该只为所有行返回一个值。我建议对聚合函数使用一些条件逻辑,以使这些列中的每一列类似于:
INSERT INTO #temp1
SELECT
Question_ID,
sum(case when Answer_Marks = 5 then 1 else 0 end) as Excellent,
sum(case when Answer_Marks = 4 then 1 else 0 end) as Good,
sum(case when Answer_Marks = 3 then 1 else 0 end) as Average,
sum(case when Answer_Marks = 2 then 1 else 0 end) as Baverage,
sum(case when Answer_Marks = 1 then 1 else 0 end) as Poor
FROM Eval
WHERE Emp_no = 'biit218'
GROUP BY Question_ID
您需要使用insert into select语法
删除valus关键字 插入到temp1中 选择 选择问题ID 来自Eval 按问题分组\u ID , 选择COUNTAnswer_分数为优秀 来自Eval 其中答案_分数=5 Emp_no='biit218' 按问题分组\u ID , 选择COUNTAnswer_Marks作为良好 来自Eval 其中答案_分数=4 Emp_no='biit218' 按问题分组\u ID , 选择COUNTAnswer_分数作为平均值 来自Eval 其中答案_分数=3 Emp_no='biit218' 按问题分组\u ID , 选择COUNTAnswer_Marks作为平均值 来自Eval 其中,答案_分数=2 Emp_no='biit218' 按问题分组\u ID , 选择COUNTAnswer_标记为poor 来自Eval 其中,答案_=1 Emp_no='biit218' 按问题分组\u ID
请重新格式化您的问题!这是因为您的每个子查询都返回多行。这不起作用。每列获得多行。
insert into #temp1
select question_id,
count( case when Answer_Marks = 5 then 1 end ) as Excellent,
count( case when Answer_Marks = 4 then 1 end ) as Good,
count( case when Answer_Marks = 3 then 1 end ) as Average,
count( case when Answer_Marks = 2 then 1 end ) as Baverage,
count( case when Answer_Marks = 1 then 1 end ) as Poor
from Eval
where Emp_no ='biit218' and Answer_Marks between 1 and 5
group by Question_ID