[sqlServer]层状设计

本文介绍了一种通过SQL查询构建物料分类层级视图的方法,实现了从一级到六级物料类别的叠加显示,并通过不同长度的编码区分层级,便于管理和查询。
原表结构:
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


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值