zoukankan      html  css  js  c++  java
  • 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。

    执行后的结果为

  • 相关阅读:
    matlab之图像处理(2)
    FIR滤波器(1)- 基础知识
    图像融合
    IEEE Floating Point Standard (IEEE754浮点数表示法标准)
    ISE 中使用system generate
    System Generator入门
    System Generator入门笔记
    2019 Multi-University Training Contest 7 Kejin Player Final Exam
    Sequence POJ
    POJ
  • 原文地址:https://www.cnblogs.com/yangwei20160911/p/6213089.html
Copyright © 2011-2022 走看看