1

我试图在学期结束后获取学生的状态,然后更新它的表中的状态我可以在 CTE 中使用子查询吗?

;with temp As
(
    select CASE WHEN Status = 0 then 'Passed'
                when status >0 and status < 2 then 'uncomplete'
                else 'Failed' end Studentstatus
    from
    (
    SELECT     StudentID, 
               sum(CASE WHEN CourseStatus =1 then 1 else 0 end) Status
    FROM         StudentFinalResultsDetails
    group by StudentID
    )As t
)--the error in this line

问题是')'附近的语法不正确

4

1 回答 1

2

您不需要为此使用子查询,可以使用 CTE 或子查询;您正在混合它们,只需执行以下操作:

with temp As
(
  SELECT   StudentID, 
           sum(CASE WHEN CourseStatus =1 then 1 else 0 end) Status
  FROM     StudentFinalResultsDetails
  group by StudentID
) -- You have to select something after the brackets 
select CASE WHEN Status = 0 then 'Passed'
                when status >0 and status < 2 then 'uncomplete'
                else 'Failed' end AS Studentstatus
from temp

或者:删除WITH CTE

select CASE WHEN Status = 0 then 'Passed'
            when status >0 and status < 2 then 'uncomplete'
            else 'Failed' end Studentstatus
from
(
   SELECT     StudentID, 
           sum(CASE WHEN CourseStatus =1 then 1 else 0 end) Status
   FROM         StudentFinalResultsDetails
   group by StudentID
)As t

更新

在你的问题中查询的问题,你必须移动部分:

 select CASE WHEN Status = 0 then 'Passed'
                when status >0 and status < 2 then 'uncomplete'
                else 'Failed' end AS Studentstatus`

到括号的外部,WITH temp ( .... )然后从它中选择您想要的任何内容。

因为:

CTE 后面必须跟一个引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 语句。CTE 也可以在 CREATE VIEW 语句中指定为视图的定义 SELECT 语句的一部分。

在您的查询中,您没有在其后添加任何语句。见参考

于 2013-10-23T11:26:49.103 回答