Oracle
测试数据
行转列
以下一般是行转列的正常需求:
要完成该需求,可以用两种方法
一是:CASE WHEN
GROUP BY
二是PIVOT
函数
我们用第二种
代码语言:javascript复制SELECT *
FROM TEST_PIVOT
PIVOT(SUM(SCORE)
FOR COURSE IN('英语','数学','语文'))B
这些中文字段名比较刺眼,王五的 英语列和 数学列也为空不好看 我们这边强壮下sql
代码语言:javascript复制SELECT NAME,
NVL(ENGLISH,0) AS ENGLISH,
NVL(MARTH,0) AS MARTH,
NVL(LANGUAGES,0) AS LANGUAGES
FROM TEST_PIVOT
PIVOT(SUM(SCORE)
FOR COURSE IN('英语' AS ENGLISH ,'数学' AS MARTH,'语文' AS LANGUAGES))
为什么聚合函数用的是SUM
原因是要看具体的逻辑,如果李四的语文补考了一次,不同的聚合函数代表不同的逻辑:
列转行
要完成该需求,可以用两种方法
一是:UNION ALL
二是UMPIVOT
函数
我们用第二种
代码语言:javascript复制SELECT name,COURSE,SCORE
FROM TEST_PIVOT1 T
UNPIVOT(SCORE FOR COURSE IN(ENGLISH,MARTH,LANGUAGES))
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/05/12 14:15:25