语法结构如下:
decode (expression, search_1, result_1)
decode (expression, search_1, result_1, search_2, result_2)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)
decode (expression, search_1, result_1, default)
decode (expression, search_1, result_1, search_2, result_2, default)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
实例使用
创建一个学生成绩表。栏位有: 学生名, 科目名和分数。
插入测试数据。
测试一及结果:
如果是中文课程的话, 显示分数, 其他课程分数为零。
这条SQL 看上去使用意义不大。
测试二:统计中文课程的分数。看上去有点意义。
总体看来, decode 的使用看上去和case when 有点类似。如果只是用作以上两种状况,看上去意义不大。
使用的两句使用后的效果一样,看上去使用decode 多此一举。
行转列-有意义的使用
往以上table 再插入一些其他学生的成绩:
使用以下SQL:
返回:
由此看来,将行的数据转化为列, 就很有意义了。
使用case then 也可以达到相同的效果。