如何把表B中某列的值更新到对应表A列的值

whwenjz 2003-12-15 09:48:19
我有这样两张表:
A表字段名称:BIANH 中药 西药 草药
B表字段名称:leib amount
B表内容如下:中药 10
西药 20
草药 30
现在我要得到的结果是要求A表中显示的数据如下:
BIANH 中药 西药 草药
1 10 20 30
请问用游标怎么才能实现?
注:A表中出BIANH字段外,其它字段都是自动产生的,但表A和表B有一个共同点就是:A表中的字段“中药 西药 草药”和表B中字段Leib显示的长度一样。也就是说A表现在出BIANH字段外不是还有三个字段吗,现在表B显示的值肯定是三行,依次类推。
...全文
139 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
whwenjz 2003-12-15
  • 打赏
  • 举报
回复
谢谢上面的各位老兄,我测试一下。
zjcxc 2003-12-15
  • 打赏
  • 举报
回复
--没必要创建B表,将B表改为存储过程自动生成就行了.
create proc p_b
as
declare @s varchar(8000)
set nocount on
set @s==''
select @s=@s+',['+leib+']=sum(case leib when '''+leib+''' then amount else 0 end)'
from (select distinct leib from A表) a
exec('select bianh=1'+@s+' from A')
set nocount off
go

--调用
exec p_b
vileboy 2003-12-15
  • 打赏
  • 举报
回复
先转置,再插入。
insert into A表(字段列表) select (字段列表)from (转置后B 表)
vileboy 2003-12-15
  • 打赏
  • 举报
回复
再改:
declare @leib varchar(20)
declare @amount numeric(20,3)
declare @sql nvarchar(2000)
declare curb cursor for
select * from B表
open curb
fetch next from curb into @leib,@amount
while @@FETCH_STATUS=0
begin
set @sql=''
set @sql='update A 表 set '+@leib+'=@amount where 你的条件'
exec(@sql)
fetch next from curb into @leib,@amount
end

CLOSE curb
DEALLOCATE curb
vileboy 2003-12-15
  • 打赏
  • 举报
回复
不知道我理解对了吗,你去试试,不行再改:

declare @leib varchar(20)--药物类型
declare @amount numeric(20,3)--数量
declare @sql nvarchar(2000)
declare curb cursor for
select * from B表
open curb
fetch next from curb into @leib,@amount
while @@FETCH_STATUS=0
begin
set @sql=''
set @sql='update A 表 set '+@leib+'=@amount where 你的条件'
exec(@sql)
fetch next from curb into @leib,@amount
end
whwenjz 2003-12-15
  • 打赏
  • 举报
回复
我是要把表B的数据插入到表A中
ghosthjt 2003-12-15
  • 打赏
  • 举报
回复
行列交换,有很多贴子,搜搜看会有收获的.
wzh1215 2003-12-15
  • 打赏
  • 举报
回复
create table zzz(leib varchar(10),anount int)
insert zzz select '中药', 10
union all select '西药', 20
union all select '草药', 30
union all select '中西药',10
select * from zzz

declare @sql varchar(8000)
set @sql = 'select 1 as id'
select @sql = @sql + ',sum(case leib when '''+leib+''' then anount end) ['+leib+']'
from (select distinct leib from zzz) as a
select @sql
select @sql = @sql+' from zzz'
select @sql
exec(@sql)
wzh1215 2003-12-15
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql = 'select 1 as id'
select @sql = @sql + ',sum(case leib when '''+leib+''' then anount end) ['+leib+']'
from (select distinct leib from 表) as a
select @sql = @sql+' from 表 group by id'
exec(@sql)
whwenjz 2003-12-15
  • 打赏
  • 举报
回复
但表A中的字段出BIANH是固定外,其它的字段是不固定的。所以这种写发肯定不行
select 1 as id,sum(case leib when '中药' then amount else 0 end) '中药',
sum(case leib when '西药' then amount else 0 end) '西药',
sum(case leib when '草药' then amount else 0 end) '草药'
from 表 group by id

shuiniu 2003-12-15
  • 打赏
  • 举报
回复
同意楼上的!
wzh1215 2003-12-15
  • 打赏
  • 举报
回复
--同意楼上的看法!
--用一个B表就行了,A表多余!
select 1 as id,sum(case leib when '中药' then amount else 0 end) '中药',
sum(case leib when '西药' then amount else 0 end) '西药',
sum(case leib when '草药' then amount else 0 end) '草药'
from 表 group by id
txlicenhe 2003-12-15
  • 打赏
  • 举报
回复
我觉得楼主并不是想更新A表,而是想由B表得到A表的显示效果,对吗?

参考:
http://www.csdn.net/Develop/read_article.asp?id=22675
行列转换 交叉表

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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