with 别名 as (select * from *) select * from 别名;
with t as (select * from emp where depno=10) select * from t where empno=xxx
几个表的例子:
例子1:
with wd as (select did,arg(salary) 平均工资 from work), em as (select emp.*,w.salary from emp left join work w on emp.eid = w.eid) select * from wd,em where wd.did =em.did and wd.平均工资>em.salary;
例子2:
with TT as (select to_char(ar.archtime,'MM') as month,--ar.archtime, sum(decode(ar.indexname,'9bf85d01-7c16-43c8-893a-8d23de2aaac2', ar.num,null)) as pingtai, sum(decode(ar.indexname,'90bebfc4-dea0-43c2-8967-6fe49bd573cb', ar.num,null)) as diaotao, sum(decode(ar.indexname,'ab1859d0-f1ad-4a5d-af58-06ffda14e658', ar.num,null)) as tigong, sum(decode(ar.indexname,'97863dc9-3480-447a-bdaf-cf73d34d1bfd', ar.num,null)) as tushu from MC_ARCHIVESDATA ar where to_char(ar.archtime,'yyyy') = '{Year}' group by ar.archtime), AA as (select lpad(level,2,0) as omonth from dual connect by level<13) select AA.omonth,TT.pingtai,TT.diaotao,TT.tigong,TT.tushu from TT right join AA on TT.month = AA.omonth order by AA.omonth
oracle获取1年12个月:
--从具体的某月获取12个月(带年月) SELECT TO_CHAR( add_months(to_date('2012', 'yyyy'), ROWNUM-1), 'YYYY-MM') as Monthly FROM DUAL CONNECT BY ROWNUM <= (select months_between(to_date('2013', 'yyyy'), to_date('2012', 'yyyy')) from dual) --从1月起获取之后的12个月 select '2013-'||lpad(level,2,0) as Monthly from dual connect by level<13
oralce对字段的基本操作:
--修改字段名: alter table <table_name> rename column <column_old> to <column_new>; --修改长度: alter table <table_name> modify <column> <datatype>; --以下操作在 Oracle 10.2.0.1.0 中通过。 /*修改原字段名*/ ALTER TABLE 表名 RENAME COLUMN 字段名 TO 字段名1; /*添加一个和原字段同名的字段*/ ALTER TABLE 表名 ADD 字段名 VARCHAR2(30); /* 将原来的数据更新到新字段中 这是要注意,一定要显示进行数据类型转换(不同于MSSQL) */ UPDATE 表名 SET 字段名 = CAST(字段名1 AS VARCHAR2(30)); /*删除原来的备份字段*/ ALTER TABLE 表名 DROP COLUMN 字段名1;
oracle的递归查询:
表结构
T_XT_JIGOUXINXI:ID CHAR(32) ID JIGOUMING CHAR(20) 机构名称 FUJIGOU CHAR(32) 所属机构
数据:
00000000000000000000000000000000 |
吐鲁番电业局 |
|
74850da287104c849f9233b83a2e6bff |
输电运维工区 |
00000000000000000000000000000000 |
19a1b282c84e4d0b93e45de8e217cfc2 |
变电运维工区 |
00000000000000000000000000000000 |
6ac135f8fc0a41fe896b16c3ec41330d |
变电检修工区 |
00000000000000000000000000000000 |
b12188adf66640e5ac212f51ae393db0 |
鄯善供电局 |
00000000000000000000000000000000 |
909fb66a8b1d46faaf583bdfcbc8e346 |
托克逊供电局 |
00000000000000000000000000000000 |
根据父机构查询子机构:
select t.id,rpad(' ',level*3-2,' ')||'├'||t.jigouming AS OrgName from t_xt_jigouxinxi t start with trim(t.fujigou)IS Null /*父机构条件*/ connect by prior t.id=t.fujigou;
根据子机构查询父机构:
select t.id,rpad(' ',level*3-2,' ')||'├'||t.jigouming AS OrgName from t_xt_jigouxinxi t start with trim(t.fujigou) IS NULL connect by prior t.fujigou='19a1b282c84e4d0b93e45de8e217cfc2'; /*需要查询的子机构的父机构ID*/
顺便记一下Sql Server的查询写法: 表结构:
CREATE TABLE [dbo].[Organization]( [ID] [int] IDENTITY(1,1) NOT NULL, [OrgName] [nchar](30) NULL, [PrivOrgID] [int] NULL, CONSTRAINT [PK_Organization] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
select (case id when null then '' else space(id) end ) +OrgName as OrgName from Organization