与SQL Server中的查询相关的问题

时间:2012-02-12 10:09:33

标签: sql-server

我在SQL Server 2008中有三个表:

学生

    StudentId           Name
      1                 Ghanshyam
      2                 John
      3                 Pravin

考试

   ExamId               ExamName
     1                  English
     2                  Math
     3                  SS
     4                  Mechanical

标记

   MarksId       StudentId     ExamId     Marks
       1              1           1         90
       2              1           2         45
       3              1           3         89
       4              1           4         56
       5              1           5         93

我希望以下列格式显示结果:

   Name         English  Math  SS   Mechnical
   Ghanshyam       90     45   89     56
   John            89     38   78     87
   Pravin          98     40   48     38

如何根据以上三个表格获得上述结果

3 个答案:

答案 0 :(得分:2)

这是数据透视表的示例。看到 http://msdn.microsoft.com/en-us/library/ms177410.aspx 解释如何在MS SQL Server中执行此操作。请注意,也可以使用标准SQL执行此操作,但有点复杂。

答案 1 :(得分:1)

查看pivot操作符/ Complex pivot示例:
http://msdn.microsoft.com/en-us/library/ms177410.aspx

VendorID是您的名字,EmpX是您的主题。

答案 2 :(得分:0)

如果您不想要数据透视表,为什么不尝试这样的事情?

SELECT s.Name, 
       SUM(CASE WHEN e.ExamName =  'English' THEN m.Marks ELSE 0 END) 
         / NULLIF(COUNT(CASE WHEN e.ExamName =  'English' THEN 1 ELSE 0 END), 0) as English,
       SUM(CASE WHEN e.ExamName =  'Math' THEN m.Marks ELSE 0 END)
         / NULLIF(COUNT(CASE WHEN e.ExamName =  'Math' THEN 1 ELSE 0 END), 0) as Math,
       SUM(CASE WHEN e.ExamName =  'SS' THEN m.Marks ELSE 0 END) 
         / NULLIF(COUNT(CASE WHEN e.ExamName =  'SS' THEN 1 ELSE 0 END), 0) as SS,
       SUM(CASE WHEN e.ExamName =  'Mechanical' THEN m.Marks ELSE 0 END)
         / NULLIF(COUNT(CASE WHEN e.ExamName =  'Mechanical' THEN 1 ELSE 0 END), 0) as Mechanical
FROM students s, marks m, exams e
WHERE m.StudentID = s.StudentID
AND m.ExamID = e.ExamID