我有这样一个结构的SQL 2000的表a
cpdm cpmc
44000000 电力、热力的生产和供应
44200000 电力供应
44200100 电
44200101 工业用
46000000 水的生产和供应
46100000 自来水生产和供应
46100100 自来水
46100101 工业用
其中字段cpdm为主关键字,主关键字含义如下:头两位表示大类,3-4位表示中类,5-6位表示小类,7-8位表示具体的产品
我建立一存储过程用来查询产品的代码(cpdm),也就是说查询cpdm末尾2位数不为零的代码。比如查询工业用自来水的代码为46100101
这个存储过程查询变量为cpmc。
现在表a中存在这样一个问题:
比如我要查询工业用自来水的代码46100101,如果我在查询条件输入文本框中输入“自来水”三字,将查询不到46100101,因为我只查询cpdm尾数不为零的代码,如果输入“工业用”三字,将得到44200101和46100101,那么用户无法判断到底谁是工业用自来水,因为这两个cpdm对应的cpmc都是“工业用”三个字。这种查询是直接对表a进行的查询。
因此我想在表a基础上建立一个视图,对这个视图进行查询。这个视图只保留cpdm尾数不为零的数据,同时将小类(cpdm的后两位为零)的cpmc的值附加到产品(cpdm的末尾2位数不为零)的cpmc值前面
比如cpdm为46100101对应的cpmc的值,在这个视图中的应该为“自来水-工业用”;cpdm为44200101对应的cpmc的值,在这个视图中的应该为“电-工业用”;
解决方法一:
- select t1.cpdm,t2.cpmc+'-'+t1.cpmc as cpmc from
- (select a.cpdm,a.cpmc from a where a.cpdm%100>0) t1,
- (select a.cpdm,a.cpmc from a where a.cpdm%100=0) t2
- where left(t1.cpdm, 6) = left(t2.cpdm, 6)
解决方法二:
- create view vw_tb
- as
- select cpdm,(select cpmc from tb where cpdm=left(a.cpdm,6)+'00')+'-'+cpmc AS cpmc
- from tb a
- where right(cpdm,2)<>'00'
- go