数据库查询题

zhangqilin0426 2010-09-20 10:21:57
1、数据库中的数据格式如下:
id name

1 zhang
1 zhang
2 wang
2 li
3 li
4 zhao

要用oracle查询出相同id对应的不同内容,请写出一个sql语句,查询出结果如下:
id name
2 wang
2 li

2、将树状的数据查询成横状的,如学生成绩表;如下:
id name subject grand
1 张 语文 100
2 张 数学 80
3 张 外语 90
4 王 语文 40
5 王 数学 90
6 赵 语文 89
7 李 地理 90
.......................
查询成如下结果:
id name 语文 数学 外语 地理
1 张 100 80 90 null
...全文
162 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Diza1986 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhangqilin0426 的回复:]
一楼,我告诉你啊,我虽然是个菜鸟,但我知道我第一sql语句绝对不是太菜的,刚刚入门的人写不出来。3楼回答的我很满意,就是不知道他写的
select * from temp where id in(
select id from (
select id,name,row_number() over(partition by id,name order by name) rn from temp……
[/Quote]

我只是一个菜鸟,并不是看不起你什么的。。。
只是你这样的提问方式,感觉像是自己不动脑子,到这求个一步到位的代码应付作业,我觉得这样不太好。。。

确实在学校学的基本都是SqlServer,和Oracle有着非常大的区别,图书馆借本书了解一些很必要的
Cike121272604 2010-09-21
  • 打赏
  • 举报
回复
顶一楼!!!!这种题就是该自己弄的,动动脑筋,多搜搜就搞定了,没什么技术的。
ywz1984 2010-09-21
  • 打赏
  • 举报
回复
对了,一楼说得其实挺好的,你自己先想,这个SQL你想怎么写,遇到了什么问题?不要等着别人喂,锻炼自己学习能力,语气过了点,但是抓住人家真实的意思就行了,恨铁不成钢而已
ywz1984 2010-09-21
  • 打赏
  • 举报
回复
第一题:换个问法,有table1,和table2,数据都是一样的,找出两表中ID相同,name不一样的;
问题就简单了;
第二题:行列转换问题,这是关键;可简单的用他们给你的方法;复杂的就是具体有多少科目不知?
查查资料就明白了!

大半年没写SQL了,呵呵
kingkingzhu 2010-09-21
  • 打赏
  • 举报
回复
高手都是菜鸟来的 认真学习就是王道
心中的彩虹 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhangqilin0426 的回复:]
一楼,我告诉你啊,我虽然是个菜鸟,但我知道我第一sql语句绝对不是太菜的,刚刚入门的人写不出来。3楼回答的我很满意,就是不知道他写的
select * from temp where id in(
select id from (
select id,name,row_number() over(partition by id,name order by name) rn from temp……
[/Quote]

3楼的是分析函数 去谷歌搜吧
zhangqilin0426 2010-09-21
  • 打赏
  • 举报
回复
一楼,我告诉你啊,我虽然是个菜鸟,但我知道我第一sql语句绝对不是太菜的,刚刚入门的人写不出来。3楼回答的我很满意,就是不知道他写的
select * from temp where id in(
select id from (
select id,name,row_number() over(partition by id,name order by name) rn from temp
) group by id,rn having count(rn) = 2)
这是什么意思,好多里面的row_number(),partition都没有见过,谁能再帮我解释一下啊,谢谢。
对了,鉴于我这种菜鸟,我看什么书好了,我日常的建库,建表,增,删改查,我都会了,但好多复杂的还不懂。
cs_guzhen 2010-09-21
  • 打赏
  • 举报
回复
其实这两个sql都不难,第二个实际中用到的比较多~~
心中的彩虹 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhangqilin0426 的回复:]
1、数据库中的数据格式如下:
id name

1 zhang
1 zhang
2 wang
2 li
3 li
4 zhao

要用oracle查询出相同id对应的不同内容,请写出一个sql语句,查询出结果如下:
id name
2 wang
2 li

2、将树状的数据查询成横状的,如学生成绩表;如下:
id name subject g……
[/Quote]


with tb as
(select 1 id,'zhang' name from dual union all
select 1,'zhang' from dual union all
select 2,'wang' from dual union all
select 2,'li' from dual union all
select 3,'li' from dual union all
select 4,'zhao' from dual)
select id,name
from tb a where exists(select 1 from tb b where a.id=b.id and a.name<>b.name
)


select name,sum(decode(subject,'语文',grant)) "语文",
sum(decode(subject,'数学',grant)) "数学",
sum(decode(subject,'外语',grant)) "外语",
sum(decode(subject,'地理',grant)) "地理"
from tb
group by name






Phoenix_99 2010-09-20
  • 打赏
  • 举报
回复
select * from temp where id in(
select id from (
select id,name,row_number() over(partition by id,name order by name) rn from temp
) group by id,rn having count(rn) = 2)


2,decode,sum
  • 打赏
  • 举报
回复
同意1楼的
第二题用行列转换 你上网查查 decode
Diza1986 2010-09-20
  • 打赏
  • 举报
回复
这么简单的作业题,受不了你了
还(为梦想奋斗)
先自己写吧,错了再问
minitoy 2010-09-20
  • 打赏
  • 举报
回复
kingkingzhu 2010-09-20
  • 打赏
  • 举报
回复
1楼太打击人了吧

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧