sql sum条件求和_SQL进阶7外连接(outer join)

本文中介绍的SQL中行列转换和嵌套式侧栏的生成,将SQL语句查询的结果转换成我们想要的结果。

  • 行转列,制作交叉表头
  • 列转行
3faac4497fdcb451cee69e043ccf0ce2.png

实现行列转换(行—>列):制作交叉表

需求

根据下面的表Courses制作员工和课程的交叉表

ec526a209b33d0a6706d680b6c5d661d.png

生成如下的交叉表:

49df49ef7fd88ef860cfb184941686dc.png
方法-外连接实现
-- 水平展开求交叉表,使用外连接

select C0.name,
case when C1.name is not null then 'o' else null end as "SQL入门", -- 如果某位员工学习过某课程,则课程的相应列则出现他的名字,否则为NULL
case when C2.name is not null then 'o' else null end as "UNIX基础",
case when C3.name is not null then 'o' else null end as "java中级"
from (select distinct name from Courses) C0 -- C0是侧栏
left outer join(select name from Courses where course='SQL入门') C1 on C0.name = C1.name -- select子句中的查询结果标为C1
left outer join(select name from Courses where course='UNIX基础') C2 on CO.name = C2.name
left outer join(select name from Courses where course='java中级') C3 on CO.name = C3.name;

SQL中指定了名称的表和视图都是相当于是集合

C0-C3的各自内容如下:

  • C0包含了全部的员工
  • C1-C3每个课程学习者的集合<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值