2 column数据构成主键的表转化为1 column为主键的表
Posted 努力追上曾经的自己
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2 column数据构成主键的表转化为1 column为主键的表相关的知识,希望对你有一定的参考价值。
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
张三 德语 null
李四 语文 74
李四 数学 84
李四 物理 94
李四 英语 80
想变成(得到如下结果):
姓名 语文 数学 物理 英语 德语
---- ---- ---- ----
李四 74 84 94 ? 60
张三 74 83 93 80 ?
这里name和course确定唯一一条记录,作为主键。
转化后只有name作为主键,另一个主键的具体值被作字段,不难理解,一个横坐标course值和一个纵坐标name值可以唯一确定一条记录。
下面使用case when来实现
select name,
sum(case when course=\'let\' then score else 0 end) let,
sum(case when course=\'math\' then score else 0 end) math,
sum(case when course=\'phy\' then score else 0 end) phy,
sum(case when course=\'eng\' then score else 0 end) eng,
sum(case when course=\'ger\' then score else 0 end) ger
from grade
group by name
此处sum函数可以替换为max(),使用函数的目的是使用casewhen语句来生成一个列。
casewhen简单解释:根据name和course找到score值填充表,如果为空则置为0;
group by为必须要的语句,不然记录只有一条,name为表的第一条·记录的name。
执行后的结果为
以上是关于2 column数据构成主键的表转化为1 column为主键的表的主要内容,如果未能解决你的问题,请参考以下文章
如何获取表的 PRIMARY KEY COLUMNS(在 COMPOSITE 主键的情况下)