S_Results表中存放学生的成绩,科目ID(Subject),学生ID(Student),分数字段(Result),考试ID(Exam)
USE [School]
GO
/****** 对象:  Table [dbo].[S_Results]    脚本日期: 10/11/2006 00:18:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[S_Results](
[id] [int] IDENTITY(1,1) NOT NULL,
[Student] [int] NOT NULL,
[Subject] [int] NOT NULL,
[Exam] [int] NOT NULL,
[Result] [float] NULL CONSTRAINT [DF_results_result]  DEFAULT (0),
[School] [int] NOT NULL,
 CONSTRAINT [PK_results] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]S_Students表中存放学生的资料,主要有姓名字段(Name)
USE [School]
GO
/****** 对象:  Table [dbo].[S_Students]    脚本日期: 10/11/2006 00:18:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[S_Students](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Username] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Password] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Class] [int] NOT NULL,
[Answer] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Question] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Best] [smallint] NULL CONSTRAINT [DF_students_best]  DEFAULT ((0)),
[Tel] [int] NULL,
[Sex] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[States] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_students_states]  DEFAULT (N'在读'),
[Nationality] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_students_nationality]  DEFAULT (N'汉族'),
[Native] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_students_native]  DEFAULT (N'XX省'),
[Political] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_students_political]  DEFAULT (N'群众'),
[Birthday] [smalldatetime] NULL,
[Address] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_students_address]  DEFAULT (N'XX省'),
[Honor] [varchar](max) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_students_res]  DEFAULT (N'暂无'),
[Images] [nvarchar](128) COLLATE Chinese_PRC_CI_AS NULL,
[Logouttime] [smalldatetime] NULL,
[Logintime] [smalldatetime] NULL CONSTRAINT [DF_students_logintime]  DEFAULT (getdate()),
[Lastlogontime] [datetime] NULL CONSTRAINT [DF_students_lastlogontime]  DEFAULT (getdate()),
[Hits] [int] NULL CONSTRAINT [DF_students_hits]  DEFAULT ((0)),
[School] [int] NOT NULL,
 CONSTRAINT [PK_students] PRIMARY KEY CLUSTERED 
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]GO
SET ANSI_PADDING OFF科目表中存放各个科目的名称
USE [School]
GO
/****** 对象:  Table [dbo].[S_Subjects]    脚本日期: 10/11/2006 00:19:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[S_Subjects](
[id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[School] [int] NOT NULL,
 CONSTRAINT [PK_subjects] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
问题出来了: 
指定班级ID和考试ID, 要查询出该班参加此次考试的所有学生的ID(S_Students.id), 每个学生的姓名(S_Students.Name), 每个学生的帐户(S_Students.UserName), 每个学生的各个科目的成绩(对应科目名), 每个学生的各个科目的成绩在其所在班级中的排名和在此次考试中的排名, 每个学生的所有科目的总分, 每个学生的所有科目的总分在其所在班级中的排名和在此次考试中的排名
来点数据吧:
S_ResultsID    Student Subject  Exam   Result  School
309 25 54 12 90 1
310 25 55 12 80 1
311 25 56 12 100 1
312 25 57 12 92 1
313 25 58 12 86 1
314 25 59 12 86 1
315 26 54 12 89 1
316 26 55 12 95 1
317 26 56 12 88 1
318 26 57 12 93 1
319 26 58 12 75 1
320 26 59 12 76 1
321 27 54 12 90 1
322 27 55 12 88 1
323 27 56 12 75 1
324 27 57 12 82 1
325 27 58 12 85 1
326 27 59 12 94 1
327 28 54 12 92 1
328 28 55 12 100 1
329 28 56 12 93 1
330 28 57 12 87 1
331 28 58 12 64 1
......S_Students,S_Subjects表无非就是名字, 不在这里列出了搞了N久了, 目前只能想到这里:Select s.id,s.Name,s.UserName,r.Subject,r.Result,Rank() OVER(PARTITION BY r.Subject ORDER BY r.Result Desc) AS Rank
From S_Results r,S_Classes c,S_Students s
where r.Exam = '12' And r.Student = s.id And s.Class = c.id And s.Class = '112' And r.School = '1' And s.School = '1' And c.School = '1'结果:
ID      Name  UserName Subject Result School
29 1004 1004 54 100 1
30 1005 1005 54 95 2
28 1003 1003 54 92 3
27 1002 1002 54 90 4
25 1000 1000 54 90 4
26 1001 1001 54 89 6
32 1007 1007 54 80 7
31 1006 1006 54 78 8
35 1010 1010 54 60 9
33 1008 1008 54 59 10
34 1009 1009 54 30 11
29 1004 1004 55 100 1
28 1003 1003 55 100 1
26 1001 1001 55 95 3
......其他问题都好办, 首要问题是怎样将相同的Subject汇总到一起去并且可以显示不同Subject不同Student的Resullt?
就是要把上边的结果变成这样的结果:ID      Name  UserName SubjectID1 Result1 SubjectID2 Result2 SubjectID3 Result3 SubjectID4 Result4 SubjectID5 Result5 SubjectID6 Result6 SubjectID7 Result7 School
29 1004 1004    54        XX       55       XX        56       XX        57       XX        58       XX         59      XX         60       XX     1
.........还有就是搞定了班级排名却搞不定此次考试排名..望高手赐教!