日期:2014-05-18  浏览次数:20397 次

一个疑惑的sql面试题
有一表为address
id       name  
001         中国
002    国外
001001     江西
001002     上海
001003     北京
001004     湖北
001001001 南昌
001001002 抚州
001004001 武汉
001004002 黄冈    
用一句sql语名得到以下结果:
中国
中国-上海
中国-北京
中国-江西-南昌
中国-江西-抚州
中国-湖北-武汉
中国-湖北-黄冈
国外
结果中行的顺序可以打乱,但一定要这样的格式 
请各位高手,大师们帮帮小弟,谢谢

------解决方案--------------------
--SQL语句
select name from tt where len(id) <=3

union

select isnull(e.name+ '- '+f.myTemp,e.name) as name from
(select id,name from tt where len(id) <=3) e
left join
(select b.id, isnull(b.n2+ '- '+a.n1,b.n2) as myTemp from
(select id,name as n2 from tt d where len(id)> 3 and len(id) <=6) b
left join
(select id,name as n1 from tt c where len(id)> 6) a
on b.id=substring(a.id,1,6)
)f
on e.id = substring(f.id,1,3)