Oracle列转行和行转列的几种用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle列转行和行转列的几种用法
栏到
栏主要讨论sys_connect_by_path的用法
1,具有分层关系
SQL > createtabledept(deptnononumber,deptname varchar2 (20),mgrnononumber);
table created .
SQL >插入deptvalues (1,“总部”,空);
1 row created .
SQL >插入deptvalues (2,’浙江分公司’,1);
1 row created .
SQL > insert into dept values(3,’杭州分公司’,2);已创建
1行。
SQL >提交;
提交完成。
SQL >从部门连接中选择最大值(子串(sys_connect_by_path(deptname,’,’),2))由先前部门连接= mgrno 最大值(SUBSTER(SYS _ CONNECT _ BY _ PATH(DEPTNAME),’),2)
-总部,浙江分行,杭州分行
2,行-列转换
如果一个表的所有列都连接到一行,用逗号分隔:
SQL >选择最大值(SUBSTER(SYS _ CONNECT _ BY _ PATH(column _ name,’,’),2))
MAX(SUBSTRA(SYS _ CONNECT _ BY _ PATH(COLUMN _ NAME,’,’),2))
- DEPTNO,DEPTNAME,MGRNO
3,ListAgg(Oracle 11g)
SQL >选择DEPTNO,
2 ListAgg(NAME,’;’)
3在组
4内(由搪瓷订购)搪瓷
5来自emp
6组由deptno
7由deptno 8 /
DEPTNO搪瓷
- -
10 CLARK。国王;米勒
20亚当斯;福特。琼斯;
SCOTT。史密斯
30艾伦;布莱克;
JAMES;马丁;
TURNER;下面的W ARD
是使用tempas的列转换1
的两种用法(从t_cc_l2_employee 256中选择account_no,user_party_id,data_hierarchy_id+ where account_no不为空)
从temp union中选择account _ no,user _ party _ id全部
选择account _ no,data _ hierarchy _ id从temp 2 256中选择来自t_cc_l2_employee的data_hierarchy_id,其中account_no不为空,user_party_id不为空,data_hierarchy_id不为空)MODEL
RETURE UPDATED ROWS
PARTITION BY(account _ no)DIMENSION BY(0 AS n) MEASURES(‘ xx ‘ AS cn,’ yyyyyy’ AS cv,user_party_id,data _ hierarchy _ id)RULES UPSERT ALL(
cn[1
-注意:模型语法SQL经常遇到两个问题
1 ora-32638:模型维度中的非唯一寻址(问题是模型结果集中对应于分区依据的列具有重复值)
2 ora-25137数据值超出范围(将“yyyyyyyy”中的“yyyyyyy”扩展几个位置可以解决您的问题)
255