动态生成层级字段

原创 2017年06月05日 15:26:10
if object_id('tempdb..#Tmp_iBomDetTbl') is not null
								drop table #Tmp_iBomDetTbl

CREATE TABLE #Tmp_iBomDetTbl (
					Detail_ID int identity(1,1),
					SubItem_No varchar(50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
					ParentItem_No varchar(50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
					Cost1 int,
					cost2 int)
								
Insert into #Tmp_iBomDetTbl Values ('A','',100,100)
Insert into #Tmp_iBomDetTbl Values ('B1','A',100,100)
Insert into #Tmp_iBomDetTbl Values ('B2','A',100,100)
Insert into #Tmp_iBomDetTbl Values ('C1','B1',100,100)
Insert into #Tmp_iBomDetTbl Values ('C2','B1',100,100)
Insert into #Tmp_iBomDetTbl Values ('C3','B2',100,100)
Insert into #Tmp_iBomDetTbl Values ('C4','B2',100,100)

--Select * From #Tmp_iBomDetTbl
if object_id('tempdb..#Tmp_ExpandBom') is not null
					drop table #Tmp_ExpandBom

Create   TABLE  #Tmp_ExpandBom
		(
			Level_No  int,
			Level_Desc varchar(100) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
			Item_No   varchar(50)COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
			Cost1 int,
			Cost2 int,
			xPath   varchar(1000) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
		)   
		

DECLARE @Level_No int   
SET @Level_No=1   

	--先加入最上層的一條記錄,
 INSERT   #Tmp_ExpandBom   (Level_No,Level_Desc,Item_No,Cost1,Cost2,xPath)
 Select  Distinct @Level_No,dbo.IntToStr(@Level_No,3),a.ParentItem_No,Cost1,Cost2,ParentItem_No
 From   #Tmp_iBomDetTbl   a   
 Where  Not Exists(select SubItem_No from #Tmp_iBomDetTbl where SubItem_No=a.ParentItem_No )
  		
  			 
  WHILE   @@rowcount>0    --根據最上層的一條記錄依次找出下一級數據
		BEGIN   
			  SET   @Level_No=@Level_No+1   
			  INSERT   into #Tmp_ExpandBom  (Level_No,Level_Desc,Item_No,Cost1,cost2,xPath)

						Select Level_No,Level_Desc,SubItem_No,Cost1,cost2,xPath
						From
								(
									 Select  
											@Level_No as 'Level_No',
											b.Level_Desc+dbo.IntToStr((1+(Select count(ParentItem_No)   
																		  From #Tmp_iBomDetTbl x join #Tmp_ExpandBom y on x.ParentItem_No=y.Item_No
														 				  Where y.Level_No=@Level_No-1  
																				and  x.Detail_id<a.Detail_id
																				and x.ParentItem_No=a.ParentItem_No)),3) as 'Level_Desc',
											a.SubItem_No,
											a.Cost1,a.Cost2,
											b.xPath+'>'+a.SubItem_No as 'xPath'
									 From  #Tmp_iBomDetTbl a join #Tmp_ExpandBom b on a.ParentItem_No=b.Item_No 
									 Where b.Level_No=@Level_No-1  
								) a
		  End


DECLARE @sql nvarchar(2000)
SET @sql=''
DECLARE @Title nvarchar(50) 
DECLARE @Level_Desc varchar(100)
DECLARE @lenLevel_Desc int
DECLARE @Item_No varchar(50)
DECLARE @PrevLevel_No int
SET @PrevLevel_No=0
DECLARE @CurrLevel_No int
DECLARE @minDetail_ID int
Select @minDetail_ID=Min(Detail_ID) From #Tmp_ExpandBom Where Detail_ID>1
While @minDetail_ID is not null
       Begin
               Select @Level_Desc=Level_Desc,@lenLevel_Desc=len(level_desc),@Item_No=Item_No,@CurrLevel_No=Level_No 
               From #Tmp_ExpandBom 
               Where Detail_ID=@minDetail_ID
               
               IF @CurrLevel_No>1 And @CurrLevel_No<>@PrevLevel_No
					   Begin
							  SET @PrevLevel_No=@CurrLevel_No
							  SET @Title='Item'+CAST(@CurrLevel_No-1 as varchar)
							  SET  @sql=' Alter Table #Tmp_ExpandBom Add '	+ @Title+' nvarchar(100) '
							  exec (@sql)                   
					   End
					   
				SET @sql=''
					   
 			   SET  @sql=@sql+'  Update #Tmp_ExpandBom ' 
					+'	 Set '+@Title+' ='''+@Item_No+''''
				    +'  Where substring(Level_Desc,1,'+cast(@lenLevel_Desc as varchar)+')='''+@Level_Desc+''''

               exec (@sql)					   
			   
			
			  Select @minDetail_ID=MIN(Detail_ID) From #Tmp_ExpandBom Where Detail_ID>@minDetail_ID
              
       End

Select * From #Tmp_ExpandBom        
  

js中动态生成json. 将两层嵌套的json发送给servlet,并在servlet将两层嵌套的json取出

做导出功能,然互传数据到后台,使用了json。 一.js动态生成json 前端框架用了EasyUI,取当前页面datagrid中的数据 我将datagrid里所有的记录都放到json中,...
  • qq_27435059
  • qq_27435059
  • 2016年05月31日 22:07
  • 1731

excel导出模板实现动态封装字段【工具包系列】

excel导入导出的功能现在在后台管理的系统中越来越常见,比如导出学生信息、导出商品的信息。但是并不是每次导出都使用所 有的字段,可能是用户自定义导出字段,所以这时候就需要个性化导出设置配置。    ...
  • LOVELONG8808
  • LOVELONG8808
  • 2016年08月08日 15:05
  • 2438

Python对商品属性进行二次分类并输出多层嵌套字典

用python预测二次分类的商品属于一级标签的概率,存储为字典,排序后输出来。说的有点绕,举个例子,用户搜索“snidle”,我们可以预测出它属于“女装”“女鞋”“食品”等n个一级分类的概率,这样可以...
  • qq_15034741
  • qq_15034741
  • 2016年02月19日 16:56
  • 3087

采用CSS3的动态元素(动画)设计div块的层级式展现

此练习作品是为学习HTML5+CSS3而设计的(如有不好请大家批评指教~~~)。 操作:当页面加载时,点击网页中的绿色块(一层),则有其他几块(二层)从其中央出现并向外延伸并旋转,点击这几块中任意一个...
  • u012688910
  • u012688910
  • 2014年12月11日 16:44
  • 503

android在布局中动态增加view时的层级控制

问题:我们有时候希望动态的在android的布局中增加view,例如动态增加一个textview来显示数据为空,但是当布局较为复杂时,你希望把view加载特定的其他view的后面,这是要如何处理呢? ...
  • wangpanbaoding
  • wangpanbaoding
  • 2017年11月25日 15:09
  • 105

动态修改数据库中的字段

  • 2010年04月28日 08:54
  • 57KB
  • 下载

动态加载控件及获得sql字段的说明2

  • 2008年05月06日 19:20
  • 449KB
  • 下载

pb动态添加数据库字段

  • 2010年03月11日 13:22
  • 328B
  • 下载

C# 作的动态定义数据库字段

  • 2010年08月08日 16:25
  • 7.97MB
  • 下载

在一个打开的SQLServer表中动态增加字段

  • 2013年02月20日 12:46
  • 323KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态生成层级字段
举报原因:
原因补充:

(最多只允许输入30个字)