资源描述:
《oracle行列转换总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、最近不少人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结,希望对大家有所帮助,同时有何错疏,恳请大家指出,我也是在写作过程中学习,算是一起和大家学习吧。在写作的过程中也参考了一些资料和网友的文章,在此表示感谢。行列转换包括以下六种情况:*列转行*行转列*多列转换成字符串*多行转换成字符串*字符串转换成多列*字符串转换成多行下面分别进行举例介绍。首先声明一点,有些例子需要如下10g及以后才有的知识:a。掌握model子句,b。正则表达式c。加强的层次查询讨论的适用范围只包括8i,9i,10g及以后版本。be
2、gin:viewplaincopytoclipboardprint?01.02.1、列转行03.CREATETABLEt_col_row(04.IDINT,05.c1VARCHAR2(10),06.c2VARCHAR2(10),07.c3VARCHAR2(10));08.09.INSERTINTOt_col_rowVALUES(1,'v11','v21','v31');10.INSERTINTOt_col_rowVALUES(2,'v12','v22',NULL);11.INSERTINTOt_col_rowVALUES(3
3、,'v13',NULL,'v33');12.INSERTINTOt_col_rowVALUES(4,NULL,'v24','v34');13.INSERTINTOt_col_rowVALUES(5,'v15',NULL,NULL);14.INSERTINTOt_col_rowVALUES(6,NULL,NULL,'v35');15.INSERTINTOt_col_rowVALUES(7,NULL,NULL,NULL);16.COMMIT;17.18.SELECT*FROMt_col_row;19.20.1)UNIONALL2
4、1.适用范围:8i,9i,10g及以后版本22.SELECTid,'c1'cn,c1cv23.FROMt_col_row24.UNIONALL25.SELECTid,'c2'cn,c2cv26.FROMt_col_row27.UNIONALL28.SELECTid,'c3'cn,c3cvFROMt_col_row;29.30.若空行不需要转换,只需加一个where条件,31.WHERECOLUMNISNOTNULL即可。32.33.2)MODEL34.适用范围:10g及以后35.SELECTid,cn,cvFROMt_col
5、_row36.MODEL37.RETURNUPDATEDROWS38.PARTITIONBY(ID)39.DIMENSIONBY(0ASn)40.MEASURES('xx'AScn,'yyy'AScv,c1,c2,c3)41.RULESUPSERTALL42.(43.cn[1]='c1',44.cn[2]='c2',45.cn[3]='c3',46.cv[1]=c1[0],47.cv[2]=c2[0],48.cv[3]=c3[0]49.)50.ORDERBYID,cn;51.52.3)collection53.适用范围:8i
6、,9i,10g及以后版本54.要创建一个对象和一个集合:55.CREATETYPEcv_pairASOBJECT(cnVARCHAR2(10),cvVARCHAR2(10));56.57.CREATETYPEcv_varrASVARRAY(8)OFcv_pair;58.59.SELECTid,t.cnAScn,t.cvAScv60.FROMt_col_row,61.TABLE(cv_varr(cv_pair('c1',t_col_row.c1),62.cv_pair('c2',t_col_row.c2),63.cv_pair
7、('c3',t_col_row.c3)))t64.ORDERBY1,2;65.66.2、行转列67.68.CREATETABLEt_row_colAS69.SELECTid,'c1'cn,c1cv70.FROMt_col_row71.UNIONALL72.SELECTid,'c2'cn,c2cv73.FROMt_col_row74.UNIONALL75.SELECTid,'c3'cn,c3cvFROMt_col_row;76.77.SELECT*FROMt_row_colORDERBY1,2;78.79.1)AGGREGAT
8、EFUNCTION80.适用范围:8i,9i,10g及以后版本81.SELECTid,82.MAX(decode(cn,'c1',cv,NULL))ASc1,83.MAX(decode(cn,'c2',cv,NULL))ASc2,84.MAX(decode(cn,'c3',cv,NULL)