日期:2014-05-19  浏览次数:20515 次

请教个“数据填充”之类的问题……
比如一批居民信息,
姓名:×××     楼号:××     楼层:×   单元:××     ×××室

如何得到如下结果:
按照楼号,楼层、单元、门牌等排序列出所有居民信息,如缺少某户信息,
则填充个空记录……

如:
姓名×××     楼号:22   楼层:1     单元:1   101
姓名×××     楼号:22   楼层:1     单元:1   102
姓名×××     楼号:22   楼层:1     单元:1   103
姓名...           楼号:22   楼层:2     单元:1   201(无此记录,自动填充空记录或显示为空结果行)
姓名×××     楼号:22   楼层:2     单元:1   202
姓名×××     楼号:22   楼层:2     单元:1   203
姓名×××     楼号:22   楼层:3     单元:1   301
姓名×××     楼号:22   楼层:3     单元:1   302
姓名×××     楼号:22   楼层:3     单元:1   303

------解决方案--------------------
--try


select B.姓名, A.* from
(
select 楼号=22, 楼层=1, 单元= '1 101 '
union all select 22, 1, '1 102 '
)as A
left join 居民信息表 as B on A.楼号=B.楼号 and A.楼层=B.楼层 and A.单元=C.单元

--先生成一个楼层单元信息结果表,再左关联居民信息表
------解决方案--------------------
select isnull(姓名, ' '),
case when 姓名= ' ' then ' ' else 楼号 end,
case when 姓名= ' ' then ' ' else 楼层 end,
case when 姓名= ' ' then ' ' else 单元 end
from tablename
order by 楼号,楼层,单元,门牌
------解决方案--------------------
如果有完整的 楼号、楼层、单元 的对照表,简单,Left JOIN 就可以

如果没有,能不能用以下这些规则来判断:
1、楼号(1、2、3。。。n)、楼层(1、2。。F)、单元(101、102、...F01、F02、F0X) 都是连续的?
2、如果不连续,能不能如下判断:
a.只需要补充 出现过的楼号、楼层;
b.同一座楼,不同层房间数一样?
如果可以的话,那么,可以根据每座楼中出现过的房间号(不包含楼层号),来关联出所有楼层的房间