简体   繁体   English

通过SQL分组进行变换和透视

[英]Transform and Pivoting by Grouping in SQL

I have three tables in MsAccess as follow: 我在MsAccess中有三个表,如下所示:

Students(ID, Name, Class)
Subjects (ID, Name)
Marks (ID, StudentName[ID of Student], Subject.ID)

and following relation: 和以下关系:

Marks.Subject = Subjects.ID
Marks.StudentID = Students.ID

I need to Display following output table: 我需要显示以下输出表:

--+--------------+---------------+--------------+--------------etc..
   Student Name    Subject1Name    Subject2Name   Subject1Name
--+--------------+---------------+--------------+--------------etc..

    jkki LastN       15                50               30
    XYZ LastN        25                60               70
    gui LastN        05                30               50

Currently I have Follwing SQL: 目前我有Folwing SQL:

Transform Marks.Obtained
SELECT Students.Name, Marks.Obtained
FROM (Students INNER JOIN (Marks INNER JOIN Subjects ON Marks.Subject = Subjects.ID)
ON Students.ID = Marks.StudentName)
GROUP BY  Students.Name, Marks.Obtained
Pivot Subjects.Name

Which gives repeated output of the same name as follow: 重复输出如下名称:

--+--------------+---------------+--------------+--------------etc..
   Student Name    Subject1Name    Subject2Name   Subject1Name
--+--------------+---------------+--------------+--------------etc..

    jkki LastN       15               
    jkki LastN                          20      
    jkki LastN                                         05

Removing Group by Marks.Obtained from SQL gives following error: "you tried to execute a query that does not include the specified expression 'Obtained' as a part of aggregate function" 从SQL中删除Marks.Obtained的Group会出现以下错误:“您试图执行一个不包含指定表达式'Obtained'作为聚合函数一部分的查询”

Please help me solve this problem. 请帮我解决这个问题。

The Transform should have an aggregation function. Transform应具有聚合功能。 Try this: 尝试这个:

Transform MAX(Marks.Obtained)
SELECT Students.Name
FROM (Students INNER JOIN
      (Marks INNER JOIN
       Subjects
       ON Marks.Subject = Subjects.ID)
     ON Students.ID = Marks.StudentName)
GROUP BY Students.Name
Pivot Subjects.Name

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM