首先来说,数据库中的是二维表格,不可能是二级表头,所以你那种格式要在前台去处理SQL中可以出这种效果:
创建人 一月_现金 一月_支票 一月_分计 ... 二月
创建人 一月_现金 一月_支票 一月_分计 ... 二月
解决方案 »
- 关于 update语句 急急急
- 请教一个把ID转换成name的问题~
- 在SQL2005里用varchar(max)有什么应该注意的吗?
- 组内中间数据的排序和替换问题
- 初学者问题之四: 客户端用户密码和权限的一点设计问题
- myeclipse连接sql server2005
- 求Delete语句
- 这个问题出现在程序子线程提交3000个insert,然后10个update以及3个delete的事务提交
- 在unix平台上有没有类似ODBC的东西?
- 插入多个表的事务处理,该如何做?谢谢
- 数据库保持连接状态下,网络短时间断开.SOS,SOS,SOS■■■■■■■■■■■■■■■■■■■■■■■■■
- to yang_ 请回答
创建人 现金 支票 分计 现金 支票 分计 。总计
a 600 900 150 200 600 800。 15000
b 800 200 1000 0 0 0。 10000
c 0 0 0 100 300 400。 20000
set @s=''
select @s=@s+',现金=sum(case dt when '''+dt
+''' then 现金 else 0 end),支票=sum(case dt when '''+dt
+''' then 支票 else 0 end),分计=sum(case dt when '''+dt
+''' then isnull(现金,0)+isnull(支票,0) else 0 end)'
from(select distinct dt=convert(char(7),创建日期,120) from 表
)a group by dt
exec('select 创建人'+@s+',总计=sum(isnull(现金,0)+isnull(支票,0))
from(select 创建人,dt=convert(char(7),创建日期,120),现金,支票 from 表
)a group by 创建人')
create table 表(创建人 varchar(10),创建日期 datetime,现金 int,支票 int)
insert 表 select 'a','2004-01-01',100,300
union all select 'b','2004-01-01',800,200
union all select 'a','2004-01-01',100,300
union all select 'a','2004-01-02',400,300
union all select 'c','2004-02-01',100,300
union all select 'a','2004-02-01',100,300
union all select 'a','2004-02-01',100,300
go--处理
declare @s varchar(8000)
set @s=''
select @s=@s+',现金=sum(case dt when '''+dt
+''' then 现金 else 0 end),支票=sum(case dt when '''+dt
+''' then 支票 else 0 end),分计=sum(case dt when '''+dt
+''' then isnull(现金,0)+isnull(支票,0) else 0 end)'
from(select distinct dt=convert(char(7),创建日期,120) from 表
)a group by dt
exec('select 创建人'+@s+',总计=sum(isnull(现金,0)+isnull(支票,0))
from(select 创建人,dt=convert(char(7),创建日期,120),现金,支票 from 表
)a group by 创建人')
go--删除测试
drop table 表/*--测试结果创建人 现金 支票 分计 现金 支票 分计 总计
------ ----- ----- ----- ----- ----- ----- ------
a 600 900 1500 200 600 800 2300
b 800 200 1000 0 0 0 1000
c 0 0 0 100 300 400 400
--*/
不过我还想问一下,如果是你说的这样:
创建人 1月-现金 1月-支票 1月-分计 。。总计
a 600 900 1500 200 600 800 2300
b 800 200 1000 0 0 0 1000
c 0 0 0 100 300 400 400
这样的怎么做呢?
set @s=''
select @s=@s+',['+mm+'月-现金]=sum(case dt when '''+dt
+''' then 现金 else 0 end),['+mm+'月-支票]=sum(case dt when '''+dt
+''' then 支票 else 0 end),['+mm+'月-分计]=sum(case dt when '''+dt
+''' then isnull(现金,0)+isnull(支票,0) else 0 end)'
from(select distinct dt=convert(char(7),创建日期,120),mm=datename(month,创建日期)
from 表
)a
exec('select 创建人'+@s+',总计=sum(isnull(现金,0)+isnull(支票,0))
from(select 创建人,dt=convert(char(7),创建日期,120),现金,支票 from 表
)a group by 创建人')