已知一个表的结构为:
-------------------
姓名 科目 成绩
张三 语文 20
张三 数学 30
张三 英语 50
李四 语文 70
李四 数学 60
李四 英语 90
怎样通过select语句把他变成以下结构:
------------------------------------
姓名 语文成绩 数学成绩 英语成绩
张三      20          30          50
李四      70          60          90
insert into student values('李四','英语','90')
select * from student
----法一: 正解如下:
select A.姓名,A.成绩as语文成绩,B.成绩as数学成绩,C.成绩as英语成绩
from student A,student B,student C
where A.姓名=B.姓名and B.姓名=C.姓名
and A.科目='语文' and B.科目='数学' and C.科目='英语'
--------理解如下:
select *
from student A,student B,student C
--将三个相同的student表相互连接,连接生成6*6*6=216条记录,因为每个表中有6条记录。
where A.姓名=B.姓名and B.姓名=C.姓名
--对连接表记录进行筛选;得到(3*3*3)+(3*3*3)=27+27=54条记录。
and A.科目='语文' and B.科目='数学' and C.科目='英语'
--同时筛选三个子表中的科目内容,执行可得如下。
姓名   科目  成绩   姓名   科目   成绩   姓名   科目   成绩
张三   语文    20     张三   数学      30     张三   英语    50       
李四   语文    70     李四   数学      60     李四   英语    90       
再在select中定义一下输出即可。
----法二:正解如下
select姓名,
sum(case科目when '语文' then 成绩else 0 end) as 语文成绩,
sum(case科目when '数学' then 成绩else 0 end) as 数学成绩,
sum(case科目when '英语' then 成绩else 0 end) as 英语成绩,
avg(成绩) as 平均成绩,sum(成绩) as 总成绩
from student
group by 姓名
order by 姓名desc
结果如下:
姓名 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
张三      20          30          50          33         100
李四      70          60          90          73          220

(2)

create table A
(
year int,
Quarter varchar(30),
amount float
)
insert A select 2000,'1',1.1
insert A select 2000,'2',1.2
insert A select 2000,'3',1.3
insert A select 2000,'4',1.4
insert A select 2001,'1',2.1
insert A select 2001,'2',2.2
insert A select 2001,'3',2.3
insert A select 2001,'4',2.4
表A定义如下:
属性类型
Year Integer
Quarter Varchar(30)
Amount float

Year Quarter Amount
2000 1 1.1
2000 2 1.2
2000 3 1.3
2000 4 1.4
2001 1 2.1
2001 2 2.2
2001 3 2.3
2001 4 2.4
其中每行表表示一个季度的数据。

如果处理表A中的数据,得到如下的结果。
Year Quarter1 Quarter2 Quarter3 Quarter4
2000   1.1      1.2     1.3     1.4
2001   2.1      2.2     2.3     2.4
请用SQL写一段代码实现。

---法一:正解如下:
select T1.YEAR,T1.amount as Quarter1,T2.amount as Quarter2,T3.amount as Quarter3,T4.amount as Quarter4
from A T1,A T2,A T3,A T4
WHERE T1.YEAR=T2.YEAR AND T2.YEAR=T3.YEAR AND T3.YEAR=T4.YEAR
AND T1.Quarter='1' and T2.Quarter='2' and T3.Quarter='3' and T4.Quarter='4'
---法二:正解如下:
select year,
sum(case Quarter when '1' then Amount else 0 end) as Quarter1,
sum(case Quarter when '2' then Amount else 0 end) as Quarter2,
sum(case Quarter when '3' then Amount else 0 end) as Quarter3,
sum(case Quarter when '4' then Amount else 0 end) as Quarter4,
sum(Amount) as ALLAmount
from A
group by year
order by year

第二题:

有一张老师表T(T_ID,T_NAME);
有一张学生表S(S_ID,S_NAME);
有一张班级表C(T_ID,S_ID,C_NAME),
其中C_NAME的取值只有‘大班’和‘小班’,
请查询出符合条件的老师的名字,条件是老师在大班中带的学生数大于此老师在小班中带的学生数。
(最好用子查询吧,题目是这么要求的,另数据库用的是SQL Server)
select *
from T,
(select count(*) as x,T_ID from C where c_name='小班' group by T_ID) a,
(select count(*) as x,T_ID from C where c_name='大班' group by T_ID) b
where b.x >a.x and a.T_ID=b.T_ID and T.T_ID=b.T_ID
第三题   某个公司的面试题,题目如下:
1、找出哪些工资高于他们所在部门的平均工资的员工;
--------------------------------------------------
select A.*
from工资表a join(select部门代码,AVG(工资)as平均工资from工资表group by 部门代码)B
on a.部门代码=B.部门代码
where a.工资>B.平均工资
2、找出哪些工资高于他们所在部门的manager(经理)的工资的员工;
--------------------------------------------------------------
select A.*
from工资表a join (select * from 工资表where职务=经理)B
on a.部门代码=B.部门代码
where a.工资>B.工资

转载于:https://www.cnblogs.com/hEnius/p/10696774.html

Select 多个表并且相关联转置相关推荐

  1. excel表显示与服务器通信失败,安装通用Excel服务器端,在连接数据库的时候提示:“用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联”...

    安装通用Excel服务器端,在连接数据库的时候提示:"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联". 互和解答:该错误产生的原因主要有2种可能: ...

  2. mysql 常用命令 | 表间 弱关联 join

    show databases; use mhxy; select database();show tables; desc account_list_175;insert into mytable(n ...

  3. 【DB笔试面试592】在Oracle中,表和表之间的关联方式有哪几种?

    ♣题目 部分 在Oracle中,表和表之间的关联方式有哪几种? ♣答案部分 目前为止,无论连接操作符如何,典型的连接类型共有3种: ① 排序合并连接(Sort Merge Join,简称SMJ),Or ...

  4. 织梦装修网站设计师与案例相关联的数据调用教程

    设计师栏目 是 普通文章 模型 dede_addonarticle 装修案例栏目 是 图片集 模型 dede_addonimages 后台装修案例图集内容数据 后台设计师文章内容数据 一.设计师内容页 ...

  5. SQLServer表内自关联级联删除

    今天处理SQLServer级联删除遇到了很蛋疼的事. SQLServer 不支持表内自关联级联删除,而MySql和Oracle却支持. 貌似原因是SQLServer 会产生循环级联,就不给这样弄.所以 ...

  6. 【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符

    前言 mybatis 3.4.6 错误代码 mybatis XML mapper 错误 <select id="selectxxxList" parameterType=&q ...

  7. 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭

    已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭 引用:   http://www.cnblogs.com/maxao/archive/2011/03/18/19881 ...

  8. 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联

    message: 用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.这个问题该如何解决?=============一.控制面板->服务->MS SQL SERV ...

  9. MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)

    MyBitis(iBitis)系列随笔之一:MyBitis入门实例 MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM) MyBitis(iBitis ...

最新文章

  1. int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思
  2. Exchange Tech Issues 参考网站
  3. OpenCV测量视频编码和解码的性能(附完整代码)
  4. Git SSH 连接phacility服务器
  5. mongodb对数组元素及内嵌文档进行增删改查操作(转)
  6. hash表冲突处理方法
  7. xampp测试phpmyadmin_项目管理工具“禅道”在软件测试实验教学中的应用
  8. struts的执行流程
  9. 虚拟手机一款安卓模拟器,让你手机里拥有另外一台手机
  10. IOS 检测摇一摇动作的实现方式
  11. 一位五年工作经验架构师的感悟
  12. Presto日期函数
  13. Java集成融云服务端
  14. 实验五 java gui
  15. 解决VMware虚拟机界面太小的问题
  16. rk3288 原子操作和原子位操作
  17. Flume-----八种采集方案
  18. Aurora---前后端分离博客
  19. (六)Linux内存管理 - zoned page frame allocator - 1
  20. 掌握typora使用方法

热门文章

  1. 给wxPython事件处理函数传递参数
  2. linux 学习教程
  3. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!
  4. 可用性高达99.999%!支付系统高可用架构设计实战
  5. 深入Redis 主从复制原理
  6. 京东「卖家日志」系统的构建 | 流式计算日志系统应用实践
  7. 目标4个9的可用性?试试用 Prometheus 和 Grafana记录服务可用时间
  8. 2019年,被高估的AI与数据科学该如何发展?
  9. Java线程详解(18)-障碍器
  10. logging下的path配置的是自己本地项目下的地址