VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 927|回复: 8

sql查询表,低级问题?

[复制链接]

1

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-3-12 00:00:01 | 显示全部楼层 |阅读模式
我是生手,写出给sql语句,记住要能实现我才给分。以下是三个表,表1:学生信息表,表2:课程表,表3:成绩表,查出来要像excel那样:
学号,  姓名,语文,数学,英语
201601  张三   114  120   124
表1:
sno      sname
201601   张三
表2:cno  cname
      1    语文
      2    数学

表3  sno   cno   grade
    201601  1     114
    201601  2     120
要求查出以下内容:
sno      sname   1    2
201601   张三   114  120
回复

使用道具 举报

0

主题

12

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-6-15 19:15:01 | 显示全部楼层
行列转换问题;静态的用个case语句就可以搞定;
动态的(例如你这种)可能还多需要一个字符串拼凑^_^


回复

使用道具 举报

0

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-15 23:30:01 | 显示全部楼层
这个最好用存储过程实现,用sql写起来可读性非常差
回复

使用道具 举报

0

主题

22

帖子

23.00

积分

新手上路

Rank: 1

积分
23.00
发表于 2020-6-16 09:45:01 | 显示全部楼层
行转列
回复

使用道具 举报

0

主题

12

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-6-17 09:30:01 | 显示全部楼层
if exists(select 1 from sysobjects where id = object_id(N't1'))
drop table t1
go

create table t1
(sno varchar(10),
sname varchar(10)
)

if exists(select 1 from sysobjects where id = object_id(N't2'))
drop table t2
go
create table t2
(cno varchar(10),
cname varchar(10)
)


if exists(select 1 from sysobjects where id = object_id(N't3'))
drop table t3
go
create table t3
(sno varchar(10),
cno varchar(10),
grade int
)

insert into t1 values('201601','张三')
insert into t2 values('1','语文')
insert into t2 values('2','数学')
insert into t3 values('201601','1',100)
insert into t3 values('201601','2',80)
go

--执行查询
declare @sql varchar(2000)

set @sql = 'select t1.sno,t1.sname '
select @SQl = @sql + ',sum(case t3.cno when '+ t2.cno + ' then t3.grade else 0 end) ' + t2.cname
from t2

set @Sql = @sql + ' from t1, t3 where t1.sno = t3.sno  group by t1.sno,t1.sname '
exec( @sql)
回复

使用道具 举报

1

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-6 09:00:01 | 显示全部楼层
endman 可以实现的,我可是生手,能否解释一下,为什么要用到select 1 from sysobjects where id = object_id(N't1'),还有sum(case t3.cno when '+ t2.cno + ' then t3.grade else 0 end)中的sum干什么?我能否在dephi+access中实现
回复

使用道具 举报

0

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-7-6 10:15:01 | 显示全部楼层
....
access用case不行的好象
access的实现俺木有搞过,写不到。
回复

使用道具 举报

1

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-6 16:15:01 | 显示全部楼层
endman 可以实现的把全部成绩加起来,
if exists(select 1 from sysobjects where id = object_id(N't1'))
drop table t1
go

create table t1
(sno varchar(10),
sname varchar(10)
)

if exists(select 1 from sysobjects where id = object_id(N't2'))
drop table t2
go
create table t2
(cno varchar(10),
cname varchar(10)
)


if exists(select 1 from sysobjects where id = object_id(N't3'))
drop table t3
go
create table t3
(sno varchar(10),
cno varchar(10),
grade int
)

insert into t1 values('201601','张三')
insert into t1 values('201602','李四')
insert into t2 values('1','语文')
insert into t2 values('2','数学')
insert into t2 values('3','英语')
insert into t3 values('201601','1',100)
insert into t3 values('201601','2',80)
insert into t3 values('201601','3',120)
insert into t3 values('201601','1',111)
insert into t3 values('201601','2',90)
insert into t3 values('201601','3',124)
go

--执行查询
declare @sql varchar(2000)

set @sql = 'select t1.sno,t1.sname '
select @SQl = @sql + ',sum(case t3.cno when '+ t2.cno + ' then t3.grade else 0 end) ' + t2.cname
from t2

set @Sql = @sql + ' from t1, t3 where t1.sno = t3.sno  group by t1.sno,t1.sname '
exec( @sql)
得到如下

sno      sname    语文      数学    英语
201601        张三        211         170        244
可我要的应是:
sno      sname    语文      数学    英语
201601        张三     100         80        120
201602   李四     111        90      124
回复

使用道具 举报

1

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-6 22:30:01 | 显示全部楼层
endman 可以实现:抱歉是我插入的时候插入错了.你就解释一下我问的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表