sql server-求助!SQLServer查询实现由四张表得到新表?最新问题求助!!

问题描述

求助!SQLServer查询实现由四张表得到新表?最新问题求助!!

有四张表:Course、CourseType、Grade、student

 表Course:
 courseID    coursename    coursetypeID
 100001        智育1               001
 100002        智育2               002
 200001        德育1               001
 200002        德育2               002
 300001        体育1               001
 300002        体育2               002
 表:CourseType:
 coursetypeID       typename
 001                         必修课
 002                         选修课
 表Grade:
 studentID    courseID    grade
  S1                 100001      80
    S1                 100002      80
    S1                 200001      80
    S1                 200002      80
    S1                 300001      80
    S1                 300002      80
    S2                 100001      70
    S2                 100002      70
    S2                 200001      70
    S2                 200002      70
    S2                 300001      70
    S2                 300002      70
表student:
studentID   studentName
S1                姓名1
S2                姓名2

我如何得到表:

studentID     studentName   CountZhiYu    CouuntDeYu     CountTiYu    Count
S1                  姓名1                 70%*160        20%*160            10%*160     160
S2                  姓名2                 70%*140        20%*140             10%*140     140

 其中:1.     160=80+80,140=70+70.即两个智育成绩相加。德育、体育成绩同理。
           2.      70%*160要总后计算结果。20%*160  、10%*160同理
                     3.      Count字段是前面三个数字字段的累加。
                              例:160=70%*160+20%*160+10%*160
                     4.       S1、S2的Count总分按照从大到小排序。

恳请各位行家高手不吝惜指教!万分感谢!!

解决方案

同样的道理,可以join,然后group by
解决了之前的问题后再写给你

解决方案二:


SELECT A.*,(CountZhiYu+CouuntDeYu+CountTiYu) count
from(
select studentID,studentName
,(select sum(grade) from Grade where studentID=A.studentID and courseID LIKE '1000%')*0.7 CountZhiYu
,(select sum(grade) from Grade where studentID=A.studentID and courseID LIKE '2000%')*0.2 CouuntDeYu
,(select sum(grade) from Grade where studentID=A.studentID and courseID LIKE '3000%')*0.1 CountTiYu
from student
) a

解决方案三:

可以用inner join , outer join union 等等

select * from Course a union CourseType b union Grade c union Student d

解决方案四:

谢谢大家的慷慨帮助!
我这样写有红色错误提示:

 SELECT A.*,(CountZhiYu+CouuntDeYu+CountTiYu) count
from(
select studentID,studentName
,(select sum(grade) from Grade where studentID=A.studentID and courseID LIKE '10000%')*0.7 CountZhiYu
,(select sum(grade) from Grade where studentID=A.studentID and courseID LIKE '20000%')*0.2 CouuntDeYu
,(select sum(grade) from Grade where studentID=A.studentID and courseID LIKE '30000%')*0.1 CountTiYu
from student
) a

 错误提示:
 消息 4104,级别 16,状态 1,第 5 行
无法绑定由多个部分组成的标识符 "A.studentID"。
消息 4104,级别 16,状态 1,第 6 行
无法绑定由多个部分组成的标识符 "A.studentID"。
消息 4104,级别 16,状态 1,第 7 行
无法绑定由多个部分组成的标识符 "A.studentID"。

我该怎么改啊?

解决方案五:

还有一点需要优化:问什么有的count字段的数据是NULL??但是前面三个不都是NULL啊?例如:第三个:学生何洁,CountZhiYu是56.0,那么他的count应该是56.0才对啊!??
如下图所示:

解决方案六:

首先感谢大家的慷慨帮助!再者,我还有一个问题需要完善。

 我这样得出的结果是表student里所有同学的成绩,所以没录入成绩的学生也显示成绩为0。但是我想只得到表Grade里所有已录入成绩的学生的成绩。
 代码如下:
 SELECT A.*,(isnull(CountZhiYu,0)+isnull(CountDeYu,0)+isnull(CountTiYu,0)) Count
from( select studentID,studentName ,(select sum(grade) from Grade where studentID=A.studentID and courseID LIKE '1%')*0.7 CountZhiYu ,(select sum(grade)
from Grade where studentID=A.studentID and courseID LIKE '2%')*0.2 CountDeYu ,(select sum(grade)
from Grade where studentID=A.studentID and courseID LIKE '3%')*0.1 CountTiYu from student a ) a
order by count DESC

我该如何对代码作改动呢??恳请再次相助!!

解决方案七:

可以join,然后group by

时间: 2024-11-05 12:31:39

sql server-求助!SQLServer查询实现由四张表得到新表?最新问题求助!!的相关文章

SQL Server 2008性能故障排查(四)——TempDB

原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB:          TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过程中产生的存储过程等数据.在一个SQLServer实例中,只有一个TempDB.所以容易成为性能和磁盘空间瓶颈.TempDB可能因为空间可用程度和过量的DDL和DML操作而变得超负荷.这可能导致不相关的应用运行缓慢甚至失败.          常见的TempDB问题如下: l  T

求大神帮下忙,小弟需要一个java连接sql server数据库实现查询功能的代码

问题描述 求大神帮下忙,小弟需要一个java连接sql server数据库实现查询功能的代码 如题 求大神给个查询功能的代码 做毕业设计需要 帮帮忙 下面附上添加功能的代码 public int Add(Client c) { int count=0; try { con=this.getcon(); String sql=String.format("insert Client values('%s',%d,'%s','%s','%s','%s','%s',0,'%s')", c.g

奇怪的现象-SQL Server 2008 r2 查询效率问题(求关注求关注求关注)

问题描述 SQL Server 2008 r2 查询效率问题(求关注求关注求关注) 我有一张表,共有56个字段.发现以下情况: 1.我在我的开发机执行sql语句 set statistics time on SELECT * FROM [eShop].[dbo].[Product] (多次执行,时间平均在90-100ms) 2.在服务器上有相同的数据库,相同的表,相同的内容.执行同样SQL语句,执行结果为: (多次执行,时间平均在250ms) 3.在我的开发机连服务器的数据库,执行该语句,执行结

sql server怎么模糊查询某几列

问题描述 sql server怎么模糊查询某几列 小白一个,正在做一个管理系统,有第一周到第二十周的数据,怎么每次通过写入第几周,把本周的数据查询出来呢 解决方案 在数据查询的时候,有完整查询和模糊查询之分.在Access和SQL Server中使用模糊查询有一下几种查询: 1.用_通配符查询 "_"号表示任意单个字符,该字符号只能匹配一个字符,利用"_"号可以作为通配符组成匹配模式进行查询."_"符号可以放在查询条件 的任意位置,且只能代表一个

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)

原文:SQL Server 2012:SQL Server体系结构--一个查询的生命周期(第1部分) 为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程.     关系和存储引擎 如图所示,SQL Server被分为2个主要引擎:关系引擎和存储引擎.关系引擎有时也被称为查询处理器,因为它的主要功能是查询优化和执行.它包含检查查询语法和准备查询树的命令解析器:查询优化器毫无疑问

详解SQL Server数据库链接查询的方式_MsSql

SQL Server数据库链接查询的方式的相关知识是本文我们主要要介绍的内容,我们知道,通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志.多表连接查询是使用Sql的基本操作,但连接的方式却有多种,熟练使用这些连接方式能够简化Sql语句,提高数据库运行效率. 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中.当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息.连接操作给用户带来很

SQL SERVER中对查询结果随机排序

server|排序|随机 译:SQL SERVER中对查询结果随机排序 Randomly Sorting Query Results 查询结果随机排序 Q. How can I randomly sort query results?问:怎样才能对查询结果随机排序? A. To randomly order rows, or to return x number of randomly chosen rows, you can use the RAND function inside the S

SQL Server 2000分布式查询:OLE DB连接

概述和术语 在 MicrosoftSQL Server 2000 中,分布式查询允许SQL Server用户访问基于SQL Server的服务器以外的数据(位于其他运行SQL Server的服务器或是具有OLE DB接口的其他数据源中).OLE DB提供了统一的方式来访问异类数据源中的列表数据. 在本文中,分布式查询是指任何引用了一个或多个外部OLE DB数据源中表或行集的SELECT.INSERT.UPDATE或DELETE语句. 远程表是指存储于 OLE DB 数据源中并且不在执行查询的SQ

SQL Server 存储过程名称查询

  SQL Server存储过程名称查询 Select OBJECT_NAME(id) FROM syscomments Where [text] LIKE '%table_name%' AND OBJECTPROPERTY(id, 'IsProcedure') = 1 GROUP BY OBJECT_NAME(id) 所有使用表名