首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求SQL语句,用循环做解决方案

2012-03-06 
求SQL语句,用循环做表A费用类别,费用,医生姓名id治疗费100aa1B超费200bb2打针费300cc3......表B医生姓名,

求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
*/

热点排行
Bad Request.