在结构化表中,创建视图,合并字段自身的值

来源:互联网 发布:cmd 执行java文件 编辑:程序博客网 时间:2024/05/18 00:45

我有这样一个结构的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的值,在这个视图中的应该为“电-工业用”;

 

解决方法一:

  1. select t1.cpdm,t2.cpmc+'-'+t1.cpmc as cpmc from 
  2.     (select a.cpdm,a.cpmc from a where a.cpdm%100>0) t1,
  3.     (select a.cpdm,a.cpmc from a where a.cpdm%100=0) t2
  4. where left(t1.cpdm, 6) = left(t2.cpdm, 6)

解决方法二:

 


  1. create view vw_tb
  2. as
  3.     select cpdm,(select cpmc from tb where cpdm=left(a.cpdm,6)+'00')+'-'+cpmc AS cpmc
  4.     from tb a
  5.     where right(cpdm,2)<>'00'
  6. go