declare @sql varchar(8000)
select EmplNo,WorkInfo, Type,dateIn from TempData
set @sql = ''
set @sql = 'select EmplNo as 员工, Type as 业务 '
select @sql = @sql + ',['+dateIn+']=sum(case dateIn when '''+dateIn+''' then WorkInfo else 0 end)'
from TempData
group by dateIn
order by dateInset @sql = @sql + ' ,[合计]=sum(WorkInfo)' --增加这句
select @sql= @sql+ ' from TempData group by EmplNo, SaleType,TYPE '
exec(@sql)
select EmplNo,WorkInfo, Type,dateIn from TempData
set @sql = ''
set @sql = 'select EmplNo as 员工, Type as 业务 '
select @sql = @sql + ',['+dateIn+']=sum(case dateIn when '''+dateIn+''' then WorkInfo else 0 end)'
from TempData
group by dateIn
order by dateInset @sql = @sql + ' ,[合计]=sum(WorkInfo)' --增加这句
select @sql= @sql+ ' from TempData group by EmplNo, SaleType,TYPE '
exec(@sql)
解决方案 »
- 在条件语句后如何再加条件限制数量,请高手帮忙
- 请教一则简单的SQL过程写法
- 一关于外键的面试题
- SQL中LIKE语句速度的问题。
- 如何安装sql,我的操作系统是windows2000prifessional?
- sql记录操作日志吗?
- 我的方向是什么?(请各位也从学习计算机困境走出的大虾们帮帮忙!!急来回答)
- 怎样写多个客户端的数据库管理程序?
- 500分-----提供思路或解决者,马上给分。问题:“错误信息:代理程序处于置疑状态,在最近10分钟内没有响应-???”5
- 大学生刚学数据库,装sql遇到的问题,求解
- 帮忙想个男女转换的方法
- update某记录的某字段,在触发器中,如何获取某条记录某字段更新前的值和更新后的值?
select @sql= @sql+ ' from TempData group by EmplNo, SaleType,TYPE '
--如果再改一下,输出以下的结果呢?-----------------------------------------------------------------------------------
EmplNo SaleType Type 01-15 01-16 01-17 01-18 合计
------------------------------------------------------------------------------------
0000 冲红 开户 业绩(现金) 9000.00 .00 .00 .00 9000.00
0000 冲红 单项 业绩(现金) 660.00 460.00 182.00 .00 1302.00
1111 冲红 单项 业绩(现金) .00 .00 .00 1080.00 1080.00
0000 冲红 单项 业绩(免单) 240.00 .00 3.00 .00 243.00总计 9900.00 460.00 185.00 1080.00 11625.00
即:
1.按 合计 进行降序排列
2.对所有纵列的日期的数据进行汇总
select EmplNo,WorkInfo, Type,dateIn from TempData
set @sql = ''
set @sql = 'select EmplNo as 员工, Type as 业务 '
select @sql = @sql + ',['+dateIn+']=sum(case dateIn when '''+dateIn+''' then WorkInfo else 0 end)'
from TempData
group by dateIn
order by dateInset @sql = @sql + ' ,[合计]=sum(WorkInfo)' --增加这句合计
select @sql= @sql+ ' from TempData group by EmplNo, SaleType,TYPE ' declare @s varchar(8000)
set @s = ''
set @s = 'select ''合计:'' as 员工, null as 业务 '
select @s = @s + ',['+dateIn+']=sum(case dateIn when '''+dateIn+''' then WorkInfo else 0 end)'
from (select dateIn,sum(WorkInfo) as WorkInfo from TempData group by dateIn) ttset @s = @s + ' ,[合计]=sum(WorkInfo)' --增加这句合计
select @s= @s+ ' from TempData order by 员工 asc,合计 desc ' print @sql
print @sexec(@sql + ' union ' + @s )/*
--执行结果:
员工 业务 01-15 01-16 01-18 01-20 合计
0000 冲红 业绩(现金) 9000 0 0 0 9000
0000 冲红 业绩(现金) 660 460 182 0 1302
0000 冲红 业绩(免单) 240 0 3 0 243
1111 冲红 业绩(现金) 0 0 0 1080 1080
合计: NULL 9900 460 185 1080 11625*/
exec(@sql + ' union ' + @s )
其中的 @s 相当于 执行了 两次的 @sql ??,可不可以 在执行 exec(@sql) 后,其结果再做 总计 ?这样效率会如何?
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
exec(@sql + ' union ' + @s )
其中的 @s 相当于 执行了 两次的 @sql ??,可不可以 在执行 exec(@sql) 后,其结果再做 总计 ?这样效率会如何?
--------------------------------------其实都是在Exec中解释执行的,对两个数据集进行union
执行exec(@sql)后,再作统计可能比较麻烦,因为列是动态的
执行exec(@sql)后,再作统计可能比较麻烦,因为列是动态的----------------------------------------------------------
这也是最主要原因
呵呵,感谢 wangtiecheng !!! 结账,给分!