有下面两张表:Tab_Main字段1 字段2
A001 aaa
B002 bbb
Tab_Sub
字段1(与Tab_Main相连) 字段2 字段3
A001 1类型 100
A001 3类型 100
A001 6类型 100
A002 2类型 200
A002 4类型 200
我要的结果字段1 字段2 字段3 字段4
A001 3类型 300 aaa
A002 4类型 400 bbb解释一下,字段3就是同一个编码的汇总,字段2比较复杂,它的优先顺序是
5类型>4类型>3类型>2类型>1类型>6类型,这些类型的值的第一个字符都是1到6的数字,他们字段的长度不一样,比如: 1键盘,2显示器,3网卡 等。只能根据前面的数字判断该取哪一个。
A001 aaa
B002 bbb
Tab_Sub
字段1(与Tab_Main相连) 字段2 字段3
A001 1类型 100
A001 3类型 100
A001 6类型 100
A002 2类型 200
A002 4类型 200
我要的结果字段1 字段2 字段3 字段4
A001 3类型 300 aaa
A002 4类型 400 bbb解释一下,字段3就是同一个编码的汇总,字段2比较复杂,它的优先顺序是
5类型>4类型>3类型>2类型>1类型>6类型,这些类型的值的第一个字符都是1到6的数字,他们字段的长度不一样,比如: 1键盘,2显示器,3网卡 等。只能根据前面的数字判断该取哪一个。
drop table Tab_Main
go
create table Tab_Main(字段1 varchar(10),字段2 varchar(10))
insert into Tab_Main(字段1,字段2) values('A001', 'aaa')
insert into Tab_Main(字段1,字段2) values('A002', 'bbb')
goif object_id('pubs..Tab_Sub') is not null
drop table Tab_Sub
gocreate table Tab_Sub(字段1 varchar(10),字段2 varchar(10),字段3 int)
insert into Tab_Sub(字段1,字段2,字段3) values('A001', '1类型', 100)
insert into Tab_Sub(字段1,字段2,字段3) values('A001', '3类型', 100)
insert into Tab_Sub(字段1,字段2,字段3) values('A001', '6类型', 100)
insert into Tab_Sub(字段1,字段2,字段3) values('A002', '2类型', 200)
insert into Tab_Sub(字段1,字段2,字段3) values('A002', '4类型', 200)
goselect 字段1 , replace(字段2 , '0' , '6') 字段2 , 字段3 , 字段4 from
(
select m.* , n.字段2 as 字段4 from
(
select 字段1 , max(字段2) 字段2 , sum(字段3) 字段3 from
(
select 字段1 , replace(字段2 , '6' , '0') 字段2 , 字段3 from Tab_Sub
) t
group by 字段1
) m,Tab_Main n
where m.字段1 = n.字段1
) ttdrop table Tab_Main,Tab_Sub/*
字段1 字段2 字段3 字段4
---------- ----- ----------- ----------
A001 3类型 300 aaa
A002 4类型 400 bbb(所影响的行数为 2 行)
*/
字段1(与Tab_Main相连) 字段2 字段3
A001 3类型 100
A001 3类型 100
A001 3类型 100
A002 4类型 200
A002 4类型 200
name2 varchar(250)
)
insert into Tab_Main(name1,name2)
select 'A001','aaa'
union all
select 'A002','bbb'create table Tab_Sub
(
name1 varchar(250),
type varchar(250),
name3 float(8))
insert into Tab_Sub (name1,type,name3)
select 'A001','1类型',100
union all
select 'A001','3类型',100
union all
select 'A001','6类型',100
union all
select 'A002','2类型',200
union all
select 'A002','4类型',200select c.name1,c.name2,c.type,sum(c.name3)
from
(
select
a.name1,
a.name2,
case when (select max(left(type,1))-6 from Tab_Sub where Tab_Sub.name1=a.name1) <0
then (select max(type) from Tab_Sub where Tab_Sub.name1=a.name1)
else (select max(type) from Tab_Sub where Tab_Sub.name1=a.name1
and left(type,1)<>6
)
end as type,
b.name3
from Tab_Main a join Tab_Sub b on a.name1=b.name1
)c
group by c.name1,c.name2,c.type
后面怎么做,我正在产生中
字段1(与Tab_Main相连) 字段2 字段3
A001 3类型 100
A001 3类型 100
A001 3类型 100
A002 4类型 200
A002 4类型 200
name2 varchar(250)
)
insert into Tab_Main(name1,name2)
select 'A001','aaa'
union all
select 'A002','bbb'create table Tab_Sub
(
name1 varchar(250),
type varchar(250),
name3 float(8))
insert into Tab_Sub (name1,type,name3)
select 'A001','1类型',100
union all
select 'A001','3类型',100
union all
select 'A001','6类型',100
union all
select 'A002','2类型',200
union all
select 'A002','4类型',200select name1, convert(varchar,(case
when max(convert(tinyint ,substring(type,1,1)) %6)= 0 then 6
else
max(convert(tinyint ,substring(type,1,1)) %6)
end ) )+'类型' type
, sum(name3)as num into #tb from Tab_Sub group by name1select #tb.*,Tab_main.name2 from #tb join Tab_main on #tb.name1=Tab_main.name1
drop table #tb
drop table Tab_main
drop table Tab_sub
name2 varchar(250)
)
insert into Tab_Main(name1,name2)
select 'A001','aaa'
union all
select 'A002','bbb'create table Tab_Sub
(
name1 varchar(250),
type varchar(250),
name3 float(8))
insert into Tab_Sub (name1,type,name3)
select 'A001','1类型',100
union all
select 'A001','3类型',100
union all
select 'A001','6类型',100
union all
select 'A002','2类型',200
union all
select 'A002','4类型',200
create Function orderBY(@name1 varchar(10))
returns varchar(10)
as
begin
declare @type varchar(10)
select top 1 @type=type from Tab_Sub where name1=@name1
order by case when type='5类型' then 0
when type='4类型' then 1
when type='3类型' then 2
when type='2类型' then 3
when type='1类型' then 4
when type='6类型' then 5 end
return @type
end
-----------------
select T.name1,dbo.orderBY(T.name1),T.name3,M.name2
from
(
select name1,sum(name3) as name3
from Tab_Sub
group by name1
) T,
Tab_Main M
where T.name1=M.name1