在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