|
在查询的时候,常用到要对一个字段进行条件取值,结果要分字段显示。大家都想到group by。但是在gdt表里面,不能对group by的结果取值到单元格里,怎么办呢?
例如:我们要查询DLTBFeatures表里的TBDLMJ,根据DLBM进行分类,分为耕地,林地,园地,交通用地等等。
耕地的dlbm 是: 011 012 013
林地的dlbm 是: 021 022 023
园地的dlbm 是: 031 032 033
交通用地的dlbm 是: 104
DLBM TBDLMJ
011 5490.29621
012 1504.162206
013 363.124101
021 14536.4831
022 12511.07672
023 7984.372023
031 556.596463
032 3816.164485
033 1479.941813
104 10283.38751
我们要实现的是统计耕地,林地,园地,交通用地的面积,并作为gdt的模板。那我们的结果应该这样才可以作为模板里单元格的调用:
GDMJ LDMJ YDMJ JTYDMJ
7357.582517 35031.93185 5852.702761 10283.38751
在sql 里面我们可以使用case when xxx then xxx else xxx end来实现(这个不举例了,大家可以在网上搜一下用法),但是access不支持。怎么办呢,难倒我们在gdt里的每一行创建一个组,写一条类似如耕地:
select sum(TBDLMJ) from DLTBFeatures where DLBM in(‘011’,'012',013) 这样的语句么?难倒不能创建一个视图么?
这样的话如果DLTBFeatures表换掉了,或设计到要统计不同的村,加上别的条件,我们就要更新所有组里面的where 后面的条件,为我们的维护和二次利用增加了工作量。
这时候我们就可以用到access里面的iff语句,就可以创建一个视图。
iif(条件,操作,操作2) 操作2相当于else 如:
select
Sum(IIf(dlbm In ('011','012','013'),tbdlmj,Null)) AS gdmj,
Sum(IIf(dlbm In ('021','022','023'),tbdlmj,Null)) AS ydmj,
Sum(IIf(dlbm In ('031','032','033'),tbdlmj,Null)) AS ldmj,
Sum(IIf(dlbm In ('104'),tbdlmj,Null)) AS Jtydmj
FROM dltbfeatures
WHERE (((dltbfeatures.[qsdwmc])='长命村'));
注:iif()里面不能试用聚合函数。所以sum要在外面使用。
这样我们在维护的时候,只用改掉村名就可以了。有别的更改我们也只需要在这一条语句上更改,更加方便!
出处互联网:http://bbs.163.com/thread-7512794-1-1.html |
|