select (F1+F2+F3) as 基本工资, (F4+F5) as 补助工资 From A
解决方案 »
- 急 急 急 急 行列转换
- SQL Server权限设置问题
- 在sql server2000中如果从一个数据库中误删了一个表,应如何恢复它
- 已经取得满足条件的记录集,如何取出这个记录集的最后一条记录?
- 问一个连接sql server方面很弱很弱的问题,大家帮忙。
- Sql2000大数据量复制
- CDO发送邮件乱码问题
- SQL Server 2008 数据库备份
- ms sqlserver能否在输出时直接转换字符集
- sql:like 关键字_for东亚字符 '%中文字符%',sql语句其中的 关键字_for东亚字符 是什么?
- 如何获知sql server的字符集??
- 执行带游标的存储过程,结果会产生多个表,如何将其合并为一个表呢?就是说将查询结果显示在一个表里。在线急等。。。
是不是这个意思,我想应该不是吧
select (F1+F2+F3) as 基本工资, (F4+F5) as 补助工资 From A
-------------------
不是这样的,因为表B的项目不是固定的,
汇总的时候H1应该用
(select 项目明细代号 from B where 汇总项目代号 = 'H1')查询结果横向加起来
来代替
create table A(ECode int,[F1] int,[F2] int,[F3] int,[F4] int,[F5] int)
insert into A select 1000,1000,200,100,50,60
insert into A select 1001,2000,300,300,50,20
create table B(PCode varchar(10),CCode varchar(10))
insert into B select 'H1','F1'
insert into B select 'H1','F2'
insert into B select 'H1','F3'
insert into B select 'H2','F4'
insert into B select 'H2','F5'--执行动态查询过程
declare @s varchar(8000),@v varchar(1000),@PCode varchar(10)
set @s = 'select ECode'declare c cursor for select distinct PCode from B
open c
fetch next from c into @PCodewhile @@fetch_status=0
begin
set @s = @s+',['+@PCode+']='
set @v = ''
select @v=@v+'+'+CCode from B where PCode=@PCode
set @s = @s+'('+stuff(@v,1,1,'')+')'
fetch next from c into @PCode
end
close c
deallocate cset @s = @s + ' from A'
exec(@s)--输出结果
/*
ECode H1 H2
-------------------------------
1000 1300 110
1001 2600 70
*/--删除测试数据
drop table A,B
select 项目明细代号 from B where 汇总项目代号 = 'H1'
的查询结果
换成 F1+F2+F3...
能不能不用游标呢,用游标听说有问题,效率好像很低
因为我的数据量很大的