现在又两个表
表一内码 数量
1001 20
1002 30
1003 40
1004 50
......表二内码 代码 名称
0001 1 外购
0002 2 内购
0003 1.D 白色
0004 1.B 黑色
0005 2.D 白色
0006 2.B 黑色
1001 1.D.101 塑料
1002 1.B.102 塑胶
1003 2.D.103 钢丝
1004 2.D.101 钢材
......要求得到表代码 名称 来源 颜色 数量
1.D.101 塑料 外购 白色 20
1.B.102 塑胶 外购 黑色 30
2.D.103 钢丝 内购 白色 40
2.D.101 钢材 内购 白色 50后面还有很多内容没列出来,请教用SQL怎么做?谢谢了 !
表一内码 数量
1001 20
1002 30
1003 40
1004 50
......表二内码 代码 名称
0001 1 外购
0002 2 内购
0003 1.D 白色
0004 1.B 黑色
0005 2.D 白色
0006 2.B 黑色
1001 1.D.101 塑料
1002 1.B.102 塑胶
1003 2.D.103 钢丝
1004 2.D.101 钢材
......要求得到表代码 名称 来源 颜色 数量
1.D.101 塑料 外购 白色 20
1.B.102 塑胶 外购 黑色 30
2.D.103 钢丝 内购 白色 40
2.D.101 钢材 内购 白色 50后面还有很多内容没列出来,请教用SQL怎么做?谢谢了 !
create function yourfunction(int @innercode) return int
as
select 数量 from 表1 where 内码=@innercode
insert into 表3(列,列,列...) select 代码,名称,..,yourfunction(内码) from 表2
declare @tb1 table (内码 int,数量 int)
insert into @tb1 select 1001,20
union all select 1002,30
union all select 1003,40
union all select 1004,50
declare @tb2 table (内码 int,代码 nvarchar(10),名称 nvarchar(10))
insert into @tb2 select 1,'1','外购'
union all select 2,'2','内购'
union all select 3,'1.d','白色'
union all select 4,'1.b','黑色'
union all select 5,'2.d','白色'
union all select 6,'2.b','黑色'
union all select 1001,'1.d.101','塑料'
union all select 1002,'1.b.102','塑胶'
union all select 1003,'2.d.103','塑丝'
union all select 1004,'2.d.104','钢材'
--select *,row_number()over(partition by len(代码) order by 内码) 层次 from @tb2
select a.代码,a.名称,c.名称 as 来源,b.名称 as 颜色,d.数量 from
(select * from @tb2 where CHARINDEX('.',代码,3)=4) a left join
(select * from @tb2 where CHARINDEX('.',代码)=2 and LEN(代码)=3) b
on left(a.代码,3)=b.代码 join (select * from @tb2 where CHARINDEX('.',代码)=0) c
on left(a.代码,1)=c.代码 join @tb1 d on a.内码=d.内码(4 行受影响)(10 行受影响)
代码 名称 来源 颜色 数量
---------- ---------- ---------- ---------- -----------
1.d.101 塑料 外购 白色 20
1.b.102 塑胶 外购 黑色 30
2.d.103 塑丝 内购 白色 40
2.d.104 钢材 内购 白色 50(4 行受影响)
表2是怎么个递归法 看不出来
主要是要在表1中有数量的,我要去表2中的代码,和名称,同时取出表2中:第一个.前面的1,然后在表2中找对对应的1的名称,表2中第二个.前面的1.X,在表2中找出对应的名称,如1.D,表示,白色。
上面第二个方法可以取出,但是我后面还有很多内容,如果按照那样做的话会很麻烦的!哪位再帮帮忙