经典SQL----行列转换

来源:互联网 发布:淘宝波奇网旗舰店真假 编辑:程序博客网 时间:2024/05/22 07:49

姓名

科目

成绩

张三

语文

66

张三

数学

77

张三

英语

88

李四

语文

99

李四

数学

100

李四

英语

55

王五

语文

44

王五

数学

33

马六

英语

22

马六

语文

11


姓名

语文

数学

英语

张三

66

77

88

李四

99

100

55

王五

44

33

0

马六

11

0

22



select name,

       sum(case subject when '语文' then result else 0 end) 语文,
        sum(case subject when '数学' then result else 0 end) 数学,       
        sum(case subject when '物理' then result else 0 end) 物理,
        sum(case subject when '政治' then result else 0 end) 政治,
        sum(case subject when '英语' then result else 0 end) 英语
      from cj c
group by name;

select name,  
       sum(decode(subject, '语文', result, 0)) as 语文,  
       sum(decode(subject, '数学', result, 0)) as 数学,  
       sum(decode(subject, '英语', result, 0)) as 英语  
  from cj group by name


Oracle 中 decode 函数用法

oracle decode含义解释:

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

decode(字段或字段的运算,值1,值2,值3)

       这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3

 当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多

例如:decode(subject, '语文', result, 0) As 语文

            decode(result, 0, 男,1,女,2,人妖, 0)  性别