這樣的SQL該怎樣寫!在線等>>>>>>>> 急...........

chmz 2003-10-15 07:37:50

有三個表分別為﹕A,B,C

表A中有字段﹕TYPE,SSN,FILE_ID,PARTNO,MODELNO



表B中有字段﹕SSN,PARTNO,MODELNO



表C中有字段﹕SSN,TYPE,PARTNO


現在的問題是﹕從B,C兩表中選出相同的SSN﹐然后根據這個條件生成不重復的記錄INSERT到A表中,
同時根據SSN生成FILE_ID(整數),可能有相同的SSN,但是在這個情況﹐也不能有相同FILE_ID的﹐而是在
同一個SSN上的FILE_ID的基礎上加1.

舉例說﹕

表B中有數據:1. 123,ab,fete
2. 123,ac,fete
3. 123,ad,fete
4. 123,ef,fete
5. 478,cd,fete
6. 478,ae,fete
7. 485,ab,fete
.......

表C中有數據:1.123,fo,ab
2.123,fo,ac
3.123,fo,ad
4.123,fo,ef
5.478,ea,cd
6.478,wd,ae
7.485,we,ft
......


現需在A表中生成如下的數據﹕

fo,123,1,ab,fete
fo,123,2,ac,fete
fo,123,3,ad,fete
fo,123,4,ef,fete
ea,478,5,cd,fete
wd,478,6,ae,fete
we,485,7,ft,we
......



這樣的SQL該怎樣寫!

請各位快點幫忙﹐俺小弟在線等>>>>>>>>>
...全文
28 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
chmz 2003-10-15
  • 打赏
  • 举报
回复
在此小弟要補充一下﹐FILE_ID并不是僅僅只是一位﹐可能數據大了﹐可能有8-9位數
pengdali 2003-10-15
  • 打赏
  • 举报
回复
上面都是得到你的表,你只要一句呀。

......

--得到临时表
select c.TYPE,c.ssn,IDENTITY(int, 1,1) flag,c.PARTNO,b.modelno into #temp from #b b right join #c c on b.ssn=c.ssn and b.PARTNO=c.PARTNO--and b.flag=c.flag

--插入A表
insert #a select * from #temp

--显示A表
select * from #a

.....
pengdali 2003-10-15
  • 打赏
  • 举报
回复
create table #a(TYPE varchar(10),SSN int,FILE_ID int,PARTNO varchar(10),MODELNO varchar(10))



create table #b(SSN int,PARTNO varchar(10),MODELNO varchar(10))
insert #b values(123,'ab','fete')
insert #b values(123,'ac','fete')
insert #b values(123,'ad','fete' )
insert #b values(123,'ef','fete' )
insert #b values(478,'cd','fete')
insert #b values(478,'ae','fete')
insert #b values(485,'ft','fete')

create table #c(SSN int,TYPE varchar(10),PARTNO varchar(10))
insert #c values(123,'fo','ab')
insert #c values(123,'fo','ac')
insert #c values(123,'fo','ad')
insert #c values(123,'fo','ef')
insert #c values(478,'ea','cd')
insert #c values(478,'wd','ae')
insert #c values(485,'we','ft')

select c.TYPE,c.ssn,IDENTITY(int, 1,1) flag,c.PARTNO,b.modelno into #temp from #b b right join #c c on b.ssn=c.ssn and b.PARTNO=c.PARTNO--and b.flag=c.flag

insert #a select * from #temp

select * from #a

go
drop table #b,#c,#a,#temp

--???
chmz 2003-10-15
  • 打赏
  • 举报
回复
這不是太復雜了吧,能不能簡單點!!!!
pengdali 2003-10-15
  • 打赏
  • 举报
回复
第一个是得到
1
2
3
4
1
2
1
这样,如果你是要
1
2
3
4
5
6
7
你用第二个,就完全符合你的题目了。
chmz 2003-10-15
  • 打赏
  • 举报
回复
to pengdali(大力 V3.0) :



SORRY!
舉的例子中有誤﹕
現需在A表中生成如下的數據﹕


fo,123,1,ab,fete
fo,123,2,ac,fete
fo,123,3,ad,fete
fo,123,4,ef,fete
ea,478,5,cd,fete
wd,478,6,ae,fete
we,485,7,ft,fete
pengdali 2003-10-15
  • 打赏
  • 举报
回复
create table #a(TYPE varchar(10),SSN int,FILE_ID int,PARTNO varchar(10),MODELNO varchar(10))



create table #b(SSN int,PARTNO varchar(10),MODELNO varchar(10))
insert #b values(123,'ab','fete')
insert #b values(123,'ac','fete')
insert #b values(123,'ad','fete' )
insert #b values(123,'ef','fete' )
insert #b values(478,'cd','fete')
insert #b values(478,'ae','fete')
insert #b values(485,'ab','fete')

create table #c(SSN int,TYPE varchar(10),PARTNO varchar(10))
insert #c values(123,'fo','ab')
insert #c values(123,'fo','ac')
insert #c values(123,'fo','ad')
insert #c values(123,'fo','ef')
insert #c values(478,'ea','cd')
insert #c values(478,'wd','ae')
insert #c values(485,'we','ft')


select c.TYPE,c.ssn,IDENTITY(int, 1,1) flag,c.PARTNO,isnull(b.modelno,c.type) modelno into #temp from #b b right join #c c on b.ssn=c.ssn and b.PARTNO=c.PARTNO--and b.flag=c.flag


insert #a select * from #temp

select * from #a

go
drop table #b,#c,#a,#temp


结果:

TYPE SSN FILE_ID PARTNO MODELNO
---------- ----------- ----------- ---------- ----------
fo 123 1 ab fete
fo 123 2 ac fete
fo 123 3 ad fete
fo 123 4 ef fete
ea 478 5 cd fete
wd 478 6 ae fete
we 485 7 ft we

(所影响的行数为 7 行)
pengdali 2003-10-15
  • 打赏
  • 举报
回复
create table #a(TYPE varchar(10),SSN int,FILE_ID int,PARTNO varchar(10),MODELNO varchar(10))



create table #b(SSN int,PARTNO varchar(10),MODELNO varchar(10))
insert #b values(123,'ab','fete')
insert #b values(123,'ac','fete')
insert #b values(123,'ad','fete' )
insert #b values(123,'ef','fete' )
insert #b values(478,'cd','fete')
insert #b values(478,'ae','fete')
insert #b values(485,'ab','fete')

create table #c(SSN int,TYPE varchar(10),PARTNO varchar(10))
insert #c values(123,'fo','ab')
insert #c values(123,'fo','ac')
insert #c values(123,'fo','ad')
insert #c values(123,'fo','ef')
insert #c values(478,'ea','cd')
insert #c values(478,'wd','ae')
insert #c values(485,'we','ft')


select c.TYPE,c.ssn,0 flag,c.PARTNO,isnull(b.modelno,c.type) modelno into #temp from #b b right join #c c on b.ssn=c.ssn and b.PARTNO=c.PARTNO--and b.flag=c.flag
declare @a int,@b int
update #temp set @b=case when @a=ssn then @b+1 else 1 end,@a=ssn,flag=@b

insert #a select * from #temp

select * from #a

go
drop table #b,#c,#a,#temp


结果:
TYPE SSN FILE_ID PARTNO MODELNO
---------- ----------- ----------- ---------- ----------
fo 123 1 ab fete
fo 123 2 ac fete
fo 123 3 ad fete
fo 123 4 ef fete
ea 478 1 cd fete
wd 478 2 ae fete
we 485 1 ft we

(所影响的行数为 7 行)
cgsun 2003-10-15
  • 打赏
  • 举报
回复
fo,123,1,ab,fete
fo,123,2,ac,fete
fo,123,3,ad,fete
fo,123,4,ef,fete
ea,478,1,cd,fete
wd,478,1,ae,fete
we,485,1,ft,we
we,485,2,ft,we

用cursor可以.
但還有其他的方法碼
txlicenhe 2003-10-15
  • 打赏
  • 举报
回复
create table a(type varchar(10),ssn int,file_id int,partno varchar(10),modelno varchar(10))
create table b(ssn int,partno varchar(10),modelno varchar(10))
create table c(ssn int,type varchar(10),partno varchar(10))

insert b select 123,'ab','fete'
union all select 123,'ac','fete'
union all select 123,'ad','fete'
union all select 123,'ef','fete'
union all select 478,'cd','fete'
union all select 478,'ae','fete'
union all select 485,'ab','fete'


insert c select 123,'fo','ab'
union all select 123,'fo','ac'
union all select 123,'fo','ad'
union all select 123,'fo','ef'
union all select 478,'ea','cd'
union all select 478,'wd','ae'
union all select 485,'we','ft'


Select identity(int,1,1) as iid,* into #tmp from (Select distinct c.type,b.ssn,b.partno,b.modelno from b join c on b.ssn = c.ssn) aa
Select * from #tmp
insert a
select type,ssn,iid,partno,modelno from #tmp

Select * from a
type ssn iid partno modelno
---------- ----------- ----------- ---------- ----------
ea 478 1 ae fete
ea 478 2 cd fete
fo 123 3 ab fete
fo 123 4 ac fete
fo 123 5 ad fete
fo 123 6 ef fete
wd 478 7 ae fete
wd 478 8 cd fete
we 485 9 ab fete

(所影响的行数为 9 行)


cgsun 2003-10-15
  • 打赏
  • 举报
回复
fo,123,1,ab,fete
fo,123,2,ac,fete
fo,123,3,ad,fete
fo,123,4,ef,fete
ea,478,1,cd,fete
wd,478,1,ae,fete
we,485,1,ft,we
we,485,2,ft,we
因該要這樣的把
pengdali 2003-10-15
  • 打赏
  • 举报
回复
我是问这个:

fo,123,1,ab,fete
fo,123,2,ac,fete
fo,123,3,ad,fete
fo,123,4,ef,fete
ea,478,1(这里是1还是5) ,cd,fete
wd,478,2,ae,fete
we,485,1,ft,这个we也是错的吧。
pengdali 2003-10-15
  • 打赏
  • 举报
回复
wd,478,6,ae,fete
we,485,7,ft,we <<==这又是那里来的?
chmz 2003-10-15
  • 打赏
  • 举报
回复
不矛盾﹐因為雖然有同一個SSN﹐但是同一個SSN上有不同的PARTNO
txlicenhe 2003-10-15
  • 打赏
  • 举报
回复
暂未看明白。
chmz 2003-10-15
  • 打赏
  • 举报
回复
各位大大快幫幫小弟﹐小弟有急用!!!!!!!!!!!
CrazyFor 2003-10-15
  • 打赏
  • 举报
回复
insert into a
select c.fo,b.SSN,0,b.PARTNO,b.MODELNO from b,c where b.snn c.snn
declare @i int
set @i=1
update a set FILE_ID=@i ,@i=@i+1

----------------
select * from a
pengdali 2003-10-15
  • 打赏
  • 举报
回复
現需在A表中生成如下的數據﹕

fo,123,1,ab,fete
fo,123,2,ac,fete
fo,123,3,ad,fete
fo,123,4,ef,fete
ea,478,5,cd,fete
wd,478,6,ae,fete
we,485,7,ft,we
......

和你说的“而是在同一個SSN上的FILE_ID的基礎上加1.” 有矛盾吗?
playyuer 2003-10-15
  • 打赏
  • 举报
回复
NO 1

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧