求SQL语句,用循环做
表A
费用类别,费用,医生姓名 id
治疗费 100 aa 1
B超费 200 bb 2
打针费 300 cc 3
...
...
表B
医生姓名, 治疗费, B超费, 打针费,床位费 ... ...
aa 100 100 100 100
bb 200 300 100 200
cc 300 200 200 200
UPDATE后要出来的结果
医生姓名, 治疗费, B超费, 打针费,床位费 ... ...
aa 200 100 100 100
bb 200 500 100 200
cc 300 200 500 200
因为表A数据很多,最好有个循环做完
以下是我做的.还是不对
declare @c char(20)
declare @c1 char(20)
declare @i money
declare @sql char(8000)
select @c=医生,@c1=费用类别,@i=费用 from aa where [id]=1
select @c,@c1,@i
--以上是正确的.
--后面的错误请高手帮忙修改
sql= 'update sheet set '@c '= '@c '+ '@i ' from sheet where 医生= '@c ' '
exec sql
http://community.csdn.net/Expert/topic/5607/5607124.xml?temp=.707287
[解决办法]
sql= 'update sheet set '+@c1+ '= '+@c1+ '+ '+ltrim(@i)+ ' where 医生= ' ' '+@c+ ' ' ' '
exec (sql)
[解决办法]
Declare @S1 Nvarchar(4000), @S2 Nvarchar(4000)
Select @S1 = ' ', @S2 = ' '
Select @S1 = @S1 + ', ' + 费用类别 + N ' = B. ' + 费用类别 + ' + C. ' + 费用类别 , @S2 = @S2 + N ', SUM(Case 费用类别 When N ' ' ' + 费用类别 + N ' ' ' Then 费用 Else 0 End) As ' + 费用类别
From A Group By 费用类别
Select @S1 = 'Update B Set ' + Stuff(@S1, 1, 1, ' ') + N ' From B Inner Join (Select 医生姓名 ' + @S2 + N ' From A Group By 医生姓名) C On B.医生姓名 = C.医生姓名 '
EXEC(@S1)
GO
Select * From B
[解决办法]
Create Table A
(费用类别Nvarchar(20),
费用Int,
医生姓名Varchar(20),
idInt)
Insert A Select N '治疗费 ', 100, 'aa ', 1
Union All Select N 'B超费 ', 200, 'bb ', 2
Union All Select N '打针费 ', 300, 'cc ', 3
Create Table B
(医生姓名Varchar(20),
治疗费Int,
B超费Int,
打针费Int,
床位费Int)
Insert B Select 'aa ', 100, 100, 100, 100
Union All Select 'bb ', 200, 300, 100, 200
Union All Select 'cc ', 300, 200, 200, 200
GO
Declare @S1 Nvarchar(4000), @S2 Nvarchar(4000)
Select @S1 = ' ', @S2 = ' '
Select @S1 = @S1 + ', ' + 费用类别 + N ' = B. ' + 费用类别 + ' + C. ' + 费用类别 , @S2 = @S2 + N ', SUM(Case 费用类别 When N ' ' ' + 费用类别 + N ' ' ' Then 费用 Else 0 End) As ' + 费用类别
From A Group By 费用类别
Select @S1 = 'Update B Set ' + Stuff(@S1, 1, 1, ' ') + N ' From B Inner Join (Select 医生姓名 ' + @S2 + N ' From A Group By 医生姓名) C On B.医生姓名 = C.医生姓名 '
EXEC(@S1)
GO
Select * From B
GO
Drop Table A, B
--Result
/*
医生姓名治疗费B超费打针费床位费
aa200100100100
bb200500100200
cc300200500200
*/
[解决办法]
很长会整样???
[解决办法]
drop table 表A,表B
go
create table 表A(费用类别 varchar(20),费用 int,医生姓名 varchar(10),id int)
insert into 表A
select '治疗费 ',100, 'aa ',1
union all select 'B超费 ',200, 'bb ',2
union all select '打针费 ',300, 'cc ',3
create table 表B(医生姓名 varchar(10),治疗费 int,B超费 int,打针费 int,床位费 int)
insert into 表B
select 'aa ',100,100,100,100
union all select 'bb ',200,300,100,200
union all select 'cc ',300,200,200,200
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+name+ '= '+name+ '+isnull((select 费用 from 表A where 表A.费用类别= ' ' '+name+ ' ' ' and 表A.医生姓名=表B.医生姓名),0), ' from syscolumns where id=object_id( '表B ') and name <> '医生姓名 '
select @sql=left(@sql,len(@sql)-1)
exec( 'update 表B set '+@sql)
select * from 表B
/*
医生姓名, 治疗费, B超费, 打针费,床位费
aa 200 100 100 100
bb 200 500 100 200
cc 300 200 500 200
*/