频道栏目
首页 > 数据库 > Oracle > 正文
Oracle模式SQL基础知识
2013-06-09 13:26:59           
收藏   我要投稿

Oracle模式SQL基础知识

 

Sql代码  

--创建用于测试的表及数据  

create table t603  

(  

  code  varchar2(10),  

  year  varchar2(10),  

  month varchar2(10),  

  p_id  varchar2(7),  

  v1    number(10),  

  v2    number(10)  

);  

comment on column t603.code is '工厂';  

comment on column t603.year is '年份';  

comment on column t603.month is '月份';  

comment on column t603.p_id is '产品';  

comment on column t603.v1 is '生产量';  

comment on column t603.v2 is '销售量';  

   

insert into t603 values('600001',2012,11,'30',1,1);  

insert into t603 values('600001',2012,11,'31',1,1);  

insert into t603 values('600001',2012,11,'10',2,2);  

insert into t603 values('600002',2012,12,'10',3,2);  

insert into t603 values('600002',2012,12,'31',2,1);  

insert into t603 values('600002',2012,12,'30',2,1);  

   

select * from t603;  

 

--按自定义的规则聚合

 

Sql代码  

select code,  

       p_id,  

       v1   

  from t603  

 where code in ('600001', '600002')   

       model return updated rows --MODEL后面的RETURN UPDATED ROWS子句将结果限制为在该查询中创建或更新的那些行,使结果集只包含新计算的值。  

       partition by(code)        --分区  

       dimension by(p_id)        --维度  

       measures(v1)              --度量  

       rules (v1['err1'] = v1['30'] + v1['31'] - v1['10']) --计算规则  

 order by code, p_id;  

  

输出   CODEP_IDV1

1600001err10

2600002err11

 

 

 

--按多个规则聚合,返回包括非聚合行

 

Sql代码  

select code,  

       year,  

       p_id,   

       month,  

       v1  

  from t603  

 where year = '2012'  

       model  

       partition by (code,year)  

       dimension by (p_id,month)  

       measures (v1,v2)  

       rules (  

             v1['err1',11] = v1['30',11] + v1['31',11] - v1['10',11],  

             v2['err1',12] = v2['30',12] + v2['31',12] - v2['10',12])  

 order by code, p_id;  

  

输出   CODEYEARP_IDMONTHV1

1600001201210112

2600001201230111

3600001201231111

46000012012err112

56000012012err1110

6600002201210123

7600002201230122

8600002201231122

96000022012err112

106000022012err111

 

 

 

--指定要聚合的维值

 

Sql代码  

select code,  

       p_id,   

       month,  

       v1  

  from t603  

 where year = '2012'  

       model return updated rows  

       partition by (code)  

       dimension by (p_id,month)  

       measures (v1)  

       rules (  

             v1['err1',for month in(11,12)] = v1['30',cv(month)] + v1['31',cv(month)] -v1['10',cv(month)])  

 order by code, p_id, month;  

  

输出  CODEP_IDMONTHV1

1600001err1110

2600001err112

3600002err111

4600002err1121

 

--CV()函数获取多行统计记录的当前值,可以使用表达式进行计算

--为数值型可用语法:for month from 1 to 12 increment 1

--还可以使用子查询:for year in (select year from t603)

 

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 基础知识 模式
上一篇:ORACLE纯SQL实现多行合并一行
下一篇:oracle进制转换rowid转36进制字符串
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站