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

我有这样一个结构的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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值