表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点

一. DECODE方法 (Oracle公司独家)

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 //行转列 SELECT name, SUM(DECODE(Subject, '数学', Score, 0)) 数学, SUM(DECODE(Subject, '语文', Score, 0)) 语文, SUM(DECODE(Subject, '英语', Score, 0)) 英语 FROM Scores GROUP BY name 二. CASE WHEN SELECT name, SUM( CASE WHEN Subject='数学' THEN Score ELSE 0 END) 数学, SUM( CASE WHEN Subject='语文' THEN Score ELSE 0 END) 语文, SUM( CASE WHEN Subject='英语' THEN Score ELSE 0 END) 英语 FROM Scores group by name;

Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略

Case具有两种格式,简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式

--简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END

成绩表(Scores)结构如下:

image


实现效果:

image

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwggw.html