菜鸟请教各位老鸟一问题。。表已建好,有两列
create table TABLE_A
(codeid VARCHAR2(20) not null,
name VARCHAR2(80));
insert into TABLE_A (codeid, name)
values ('340000', '安徽省');
insert into TABLE_A (codeid, name)
values ('110000', '北京市’);
。
。
。[省的后四位是0,市的后两位是0]
像上面那样把全国的每个省,每个市,每个区县都添加到表中。
要求:先1按省排序,再2按省市排序,最后3按省市区县排序。
备注:最后一行的结果为 XX省XX市XX县
create table TABLE_A
(codeid VARCHAR2(20) not null,
name VARCHAR2(80));
insert into TABLE_A (codeid, name)
values ('340000', '安徽省');
insert into TABLE_A (codeid, name)
values ('110000', '北京市’);
。
。
。[省的后四位是0,市的后两位是0]
像上面那样把全国的每个省,每个市,每个区县都添加到表中。
要求:先1按省排序,再2按省市排序,最后3按省市区县排序。
备注:最后一行的结果为 XX省XX市XX县
这样子
select * from TABLE_A order by codeid asc
字符串比较满足:
先1按省排序,再2按省市排序,最后3按省市区县排序。
AS
(
SELECT '340000' a, '安徽省' b FROM dual
UNION ALL
SELECT '341100', '安庆市' FROM dual
UNION ALL
SELECT '341101', 'MMM' FROM dual
UNION ALL
SELECT '110000', '北京市' FROM dual
UNION ALL
SELECT '111200', '东城区' FROM dual
)
SELECT substr(max(sys_connect_by_path(b,';')),2)
FROM
(
select a,b,row_number() OVER(PARTITION BY SUBSTR(a,1,2) ORDER BY a ) rn from a
)
connect by prior rn=rn-1
start with rn=1
group by a
--result:
1 北京市
2 北京市;东城区
3 安徽省
4 北京市;安庆市
5 北京市;东城区;MMM
PARTITION BY SUBSTR(a,1,2)
AS
(
SELECT '340000' a, '安徽省' b FROM dual
UNION ALL
SELECT '341100', '安庆市' FROM dual
UNION ALL
SELECT '341101', 'MMM' FROM dual
UNION ALL
SELECT '341102', 'AAAA' FROM dual
UNION ALL
SELECT '110000', '北京市' FROM dual
UNION ALL
SELECT '111200', '东城区' FROM dual
)
SELECT substr(max(sys_connect_by_path(b,',')),2)
FROM
(
select a,b,(CASE WHEN INSTR(a,'0000')>0 THEN 1 WHEN INSTR(a,'00')>0 THEN 2 ELSE 3 END) rn ,SUBSTR(a,1,2) aa from a
)
connect by prior rn=rn-1 AND PRIOR aa=aa
START WITH rn=1
group by a--考虑到另一种情况...改了一下!请TEST.
--result:
北京市
北京市,东城区
安徽省
安徽省,安庆市
安徽省,安庆市,MMM
安徽省,安庆市,AAAA
要求:先按省排序(全是省),再按省市排序(省市),最后按省市区县(有省市区县)排序。
备注:最后一行的结果为 XX省XX市XX县
-------------------
这个应该要用到
SELECT CODEID,
NAME,
CASE
WHEN SUBSTR(CODE, 3, 4) = '0000' THEN
1
when (SUBSTR(CODE, 3, 2) <> '00' and SUBSTR(CODE, 5, 2) = '00') then
2
else
3
END
FROM TABLE_A
。
有哪位高手帮忙完成,,
select rtrim(areaid,'0') areaid,areaname,substr(rtrim(areaid,'0'),1,length(rtrim(areaid,'0'))-2) pid from tab_area
) a
start with pid is null connect by prior areaid=pid
order by level,areaid;
a.name||';'
when substr(a.codeid,-2)='00' then
b.name||';'||a.name ||';'
when substr(a.codeid,-2)<>'00' then
b.name||';'||c.name||';'||a.name ||';'
end
from table_a a,
table_a b, --省
table_a c --市
where b.codeid=substr(a.codeid,1,2)||'0000' and c.codeid=substr(a.codeid,1,4)||'00'
and b.codeid=substr(c.codeid,1,2)||'0000'
order by a.codeid