[sqlServer]层状设计

原表结构:
Summary
存货分类档案
Columns

 Column NameDescriptionDatatypeLengthAllow Nulls
 cInvCCode存货大类编码 varchar12 False 
 cInvCName存货大类名称 varchar20 False 
 iInvCGrade编码级次 tinyintFalse 
 bInvCEnd是否末级 bitTrue 
 cEcoCode所属经济分类编码 varcharTrue 
 cBarCode对应条形码编码 varchar30 True 
 pubufts时间戳 timestampTrue 

意图 : 一级物料类别名称---二级物料类别名称---三级物料类别名称

将 此物料的类别进行层状叠加
建立试图

ALTER  view v_leniz_step_inventoryclass as
select
vl.cinvccode,
vl.classCode1, isNUll(invl1.cinvcname,'') as className1,
vl.classCode2, isNUll(invl2.cinvcname,'') as className2,
vl.classCode3, isNUll(invl3.cinvcname,'') as className3,
vl.classCode4, isNUll(invl4.cinvcname,'') as className4,
vl.classCode5, isNUll(invl5.cinvcname,'') as className5,
vl.classCode6, isNUll(invl6.cinvcname,'') as className6
from 
v_leniz_inventoryclass vl
left join inventoryclass invl1 on  vl.classCode1 = invl1.cinvccode
left join inventoryclass invl2 on  vl.classCode2 = invl2.cinvccode
left join inventoryclass invl3 on  vl.classCode3 = invl3.cinvccode
left join inventoryclass invl4 on  vl.classCode4 = invl4.cinvccode
left join inventoryclass invl5 on  vl.classCode5 = invl5.cinvccode
left join inventoryclass invl6 on  vl.classCode6 = invl6.cinvccode

试图二:

create view v_leniz_stepclass as
SELECT
   cinvccode as classCode,
   CASE
      WHEN len(cinvccode)=1  Then className1
      WHEN len(cinvccode)=3  Then className1 + '-' + className2
      WHEN len(cinvccode)=5  Then className1 + '-' + className2 + '-' + className3
      WHEN len(cinvccode)=7  Then className1 + '-' + className2 + '-' + className3 + '-' + className4
      WHEN len(cinvccode)=9  Then className1 + '-' + className2 + '-' + className3 + '-' + className4 + '-' + className5
      WHEN len(cinvccode)=11 Then className1 + '-' + className2 + '-' + className3 + '-' + className4 + '-' + className5 + '-' + className6
      ELSE ''
   END AS className
FROM v_leniz_step_inventoryclass


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值