用SQL语句求表的转换

wazhqi 2003-11-28 07:50:52
在access中
A表
  ID 材料名 规格
  1  AA
  2 BB
3 CC
.....
.....
B表
 材料名 批号 数量
 AA   1   100
AA 2 200
AA 10 400
 BB   2   200
 CC   3   400
 CC   4   100
 CC 5 200

上述两表转换成下表
 材料名 规格  批号 数量
 AA       1   100
       2 200
        10 400
 BB       2   200
 CC       3   400
         4   100
        5 200
...全文
51 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chao778899 2003-12-05
  • 打赏
  • 举报
回复
可以这样,在用
Select A.材料名, A.规格,B.批号,B.数量 from A righe join B on A.id=B.批号 into T3
插入表的记录后,用个语句修改一下
update t3 set 材料名=' ' where 批号 not in(select min(批号) from t3 group by 材料名)
wazhqi 2003-12-05
  • 打赏
  • 举报
回复
To 楼上
你的方法很好,非常感谢。但我的表是ACCESS,不能用上述方法
devilwind 2003-12-04
  • 打赏
  • 举报
回复
这是我的方法:
create proc test_proc
@n varchar(10)
as

declare @name varchar(10),@stander varchar(10),@batch int,@num int
declare test_devil cursor
for select a.材料名, a.规格 , b.批号 ,b.数量 from a,b where a.材料名=b.材料名 and a.材料名=@n
open test_devil
fetch next from test_devil into @name,@stander,@batch,@num
WHILE @@FETCH_STATUS = 0
begin
if EXISTS(SELECT 1 FROM #C WHERE #C.材料名=@n)
INSERT INTO #C VALUES(NULL,@stander,@batch,@num)
ELSE
INSERT INTO #C VALUES(@name,@stander,@batch,@num)

fetch next from test_devil into @name,@stander,@batch,@num
end
CLOSE test_devil
deallocate test_devil


IF OBJECT_ID('tempdb..#C') IS NOT NULL
drop table #c
create table #c(材料名 varchar(10), 规格 VARCHAR(10),批号 INT,数量 INT)
declare @i int, @a varchar(10)
if object_id('tempdb..#d') is not null
drop table #d
select distinct 材料名 into #d from a
select @i=count(材料名) from #d
while @i>0
begin
select top 1 @a=材料名 from #d
exec test_proc @a
select @i=@i-1
delete from #d where 材料名=@a
end

select * from #C
wazhqi 2003-12-02
  • 打赏
  • 举报
回复
上述的结果是是这样的呀
材料名 规格  批号 数量
 AA       1   100
AA     2 200
AA      10 400
 BB       2   200
 CC       3   400
 CC       4   100
 CC      5 200
怎样成为下表的形式
材料名 规格  批号 数量
 AA       1   100
       2 200
        10 400
 BB       2   200
 CC       3   400
         4   100
        5 200
wazhqi 2003-12-02
  • 打赏
  • 举报
回复
上述的结果是是这样的呀
材料名 规格  批号 数量
 AA       1   100
AA     2 200
AA      10 400
 BB       2   200
 CC       3   400
 CC       4   100
 CC      5 200
怎样成为下表的形式
材料名 规格  批号 数量
 AA       1   100
       2 200
        10 400
 BB       2   200
 CC       3   400
         4   100
        5 200
dear2tom 2003-12-02
  • 打赏
  • 举报
回复
首先先建好表3,然后再用
Select * from T1,T2 where T1.材料名*=T2.材料名 into T3
MouseGod 2003-12-02
  • 打赏
  • 举报
回复
用select into 语句自动建立表3 如果你又自己建一个那就出错了啊
volkia 2003-11-29
  • 打赏
  • 举报
回复
表三只是一个虚拟的情况,一个显示结果,根本就不用在数据库存储
wazhqi 2003-11-28
  • 打赏
  • 举报
回复
to myboor(菜菜菜鸟)
关键在于怎样显示和打印
myboor 2003-11-28
  • 打赏
  • 举报
回复
数据库这样存取是没有错的,你可以在显示给客户看的时候加以处理,使之显示成下表的情况
wazhqi 2003-11-28
  • 打赏
  • 举报
回复
上述的结果是是这样的呀
材料名 规格  批号 数量
 AA       1   100
AA     2 200
AA      10 400
 BB       2   200
 CC       3   400
 CC       4   100
 CC      5 200
怎样成为下表的形式
材料名 规格  批号 数量
 AA       1   100
       2 200
        10 400
 BB       2   200
 CC       3   400
         4   100
        5 200
lemonchen 2003-11-28
  • 打赏
  • 举报
回复
问题不清楚,是根据材料名连接还是ID看不出来,如果是材料名,那结果不应该是这样,我想是ID吧,所以
Select A.材料名, A.规格,B.批号,B.数量 from A righe join B on A.id=B.批号 into T3
jxc163 2003-11-28
  • 打赏
  • 举报
回复
首先先建好表3,然后再用
Select * from T1,T2 where T1.材料名=T2.材料名 into T3

34,590

社区成员

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

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