34,576
社区成员
发帖
与我相关
我的任务
分享
上面的是根据fb表的fname的内容创建相应的临时表,应该创建4个表,但是fa中没有对应‘手机’的所以只创建了3给表
id fname fcode fsale
----------- ---------------------------------------------------------------------
134 电脑_金和田主机_金和田主机(蓝色) 01.004.01 123.00
136 电脑_金和田主机_金和田主机(黑色) 01.004.02 311.00
140 电脑_金和田电脑 01.088 0.00
129 电脑_三星显示器 01.001 0.00
131 电脑_Ace鼠标 01.002 0.00
id fname fcode fsale
----------- ---------------------------------------------------------------
220 自制件_机箱板 02.004 543.00
142 自制件_机箱 02.001 0.00
id fname fcode fsale
----------- --------------------------------------------- -----------------
158 原材料_钢板 03.007 0.00
159 原材料_机箱板 03.008 0.00
这里有个根据表的记录数创建临时表的存储过程,和你的很相似,图书表有多少条记录,就根据记录创建相应的临时表,你改改就可以了
/*
id fname fcode
----------- ------------------------------------------------
134 电脑_金和田主机_金和田主机(蓝色) 01.004.01
136 电脑_金和田主机_金和田主机(黑色) 01.004.02
140 电脑_金和田电脑 01.088
129 电脑_三星显示器 01.001
131 电脑_Ace鼠标 01.002
220 自制件_机箱板 02.004
142 自制件_机箱 02.001
158 原材料_钢板 03.007
159 原材料_机箱板 03.008
fcode flevel fname
----------- ----------- ----------
1 1 电脑
2 1 自制件
3 1 原材料
5 1 手机
id fsale
----------- ---------------------------------------
134 123.00
136 311.00
220 543.00
生成下面的结果
id fname fcode fsale
----------- ---------------------------------------------------------------------
134 电脑_金和田主机_金和田主机(蓝色) 01.004.01 123.00
136 电脑_金和田主机_金和田主机(黑色) 01.004.02 311.00
140 电脑_金和田电脑 01.088 0.00
129 电脑_三星显示器 01.001 0.00
131 电脑_Ace鼠标 01.002 0.00
id fname fcode fsale
----------- ---------------------------------------------------------------
220 自制件_机箱板 02.004 543.00
142 自制件_机箱 02.001 0.00
*/
create table fa(id int, fname varchar(100), fcode varchar(20))
insert fa
select 134, '电脑_金和田主机_金和田主机(蓝色)', '01.004.01'
union all select 136, '电脑_金和田主机_金和田主机(黑色)', '01.004.02'
union all select 140, '电脑_金和田电脑', '01.088'
union all select 129, '电脑_三星显示器', '01.001'
union all select 131, '电脑_Ace鼠标', '01.002'
union all select 220, '自制件_机箱板', '02.004'
union all select 142, '自制件_机箱', '02.001'
union all select 158, '原材料_钢板', '03.007'
union all select 159, '原材料_机箱板','03.008'
create table fb(fcode int, flevel int, fname varchar(10))
insert fb
select 01,1,'电脑'
union all select 02,1,'自制件'
union all select 03,1,'原材料'
union all select 05,1,'手机'
create table fc(id int, fsale decimal(5,2))
insert fc
select 134,123.00
union all select 136,311.00
union all select 220,543.00
declare @i int
set @i=(select count(*) from fb)
declare @k int
set @k=1
declare @sql varchar(500)
while @i>=@k
begin
set @sql = 'Select Top 1 * into #fb' + convert(varchar(5),@k)+ ' From fb Where fcode in (Select Top '+ convert(varchar(5),@k)+' fcode From fb) Order by fcode desc'
set @sql = @sql + ' if exists(select id from fa,#fb' + convert(varchar(5),@k)+
' where fa.fname like '+char(39)+ '%'+ char(39)+ '+#fb' + convert(varchar(5),@k)+ '.fname+'+char(39)+ '%'+ char(39)+ ') begin select fa.id, fa.fname, fa.fcode, isnull(fc.fsale,0) as fsale into #TempTable'
+ convert(varchar(5),@k)+ ' from fa left join fc on fa.id=fc.id, #fb' + convert(varchar(5),@k)+ ' where fa.fname like '+char(39)+ '%'+ char(39)+ '+#fb'+ convert(varchar(5),@k)+'.fname+'+char(39)+ '%'+ char(39)+ ' select * from #TempTable' + convert(varchar(5),@k)+ ' end'
set @k=@k+1
exec(@sql)
end
-- 树形数据层次显示处理示例
--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
--显示结果
SELECT SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/