【问题标题】:How to join the result set of Common Table Expression with other existing table in sql server 2005?如何将公用表表达式的结果集与sql server 2005中的其他现有表连接起来?
【发布时间】:2010-11-15 09:42:51
【问题描述】:

我想将公用表表达式的结果集与现有表连接起来。使用以下查询中给出的 group by 子句会出现问题。谁能告诉我如何加入这两个表?

With CTEQuery
as
(SELECT     StudentOnlineExamCourseAnswer.StudentID, StudentOnlineExamCourseAnswer.OnlineExamID, StudentOnlineExamCourseAnswer.CourseID, 
                      StudentOnlineExamCourseAnswer.CentreID,
case QuestionBank.ComplexLevelID when 1 then (2) when 2 then (4) when 3 then (6) when 4 then (8) when 5 then (10) end as Mark
FROM         QuestionBank INNER JOIN
                      StudentOnlineExamCourseAnswer ON QuestionBank.Answer = StudentOnlineExamCourseAnswer.Answer AND 
                      QuestionBank.QuestionID = StudentOnlineExamCourseAnswer.QuestionID) 
select StudentID, OnlineExamID ,CourseID , CentreID , sum(Mark) as 'Total Marks' from CTEQuery 
group by StudentID, OnlineExamID ,CourseID , CentreID 

【问题讨论】:

    标签: sql-server common-table-expression


    【解决方案1】:

    您可以为单个选择定义多个 CTE,每个 CTE 都可以引用之前定义的 CTE。所以你可以这样做:

    With CTEQuery
    as
    (SELECT     StudentOnlineExamCourseAnswer.StudentID, StudentOnlineExamCourseAnswer.OnlineExamID, StudentOnlineExamCourseAnswer.CourseID, 
                          StudentOnlineExamCourseAnswer.CentreID,
    case QuestionBank.ComplexLevelID when 1 then (2) when 2 then (4) when 3 then (6) when 4 then (8) when 5 then (10) end as Mark
    FROM         QuestionBank INNER JOIN
                          StudentOnlineExamCourseAnswer ON QuestionBank.Answer = StudentOnlineExamCourseAnswer.Answer AND 
                          QuestionBank.QuestionID = StudentOnlineExamCourseAnswer.QuestionID)
    , SummarizedCTE as ( 
    select StudentID, OnlineExamID ,CourseID , CentreID , sum(Mark) as TotalMark from CTEQuery 
    group by StudentID, OnlineExamID ,CourseID , CentreID)
    select <new query involving joining SummarizedCTE with the "other table" referenced in your discussion>
    

    【讨论】:

      【解决方案2】:

      您需要先创建您的 CTE,然后在下一个 SELECT 语句中使用它。

      WITH cteTest (Column1) AS 
      (
          SELECT column1
            FROM table1
      )
      
      SELECT *
        FROM cteTest
        JOIN Table2
          ON cteTest.column1 = Table2.column1
      

      【讨论】:

        【解决方案3】:

        例子

        with demoCTE 
        as
        (
          select id from table1
        ) select * from demoCTE
            join table2
           on demoCTE.id= table2.id
        

        【讨论】:

          猜你喜欢
          • 2012-06-10
          • 1970-01-01
          • 1970-01-01
          • 2021-10-03
          • 2019-07-17
          • 2014-05-31
          • 2016-03-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多