***********简单的问题 !立刻结帖!!******** (50分)

  • 主题发起人 主题发起人 crazyD
  • 开始时间 开始时间
C

crazyD

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现这样的效果 执行一段SQL语句后得到下面的表格
姓名 时间 数量
张三 2004-04-05 3
张三 2004-04-06 4
李四 2004-04-05 6
李四 2004-04-06 8
王五 2004-04-05 8
王五 2004-04-06 7

姓名,时间数量, 是数据空中的三个字段
但是我想得到这样的显示的表格
张三 李四 王五
2004-04-05 4 7 8
2004-04-06 3 4 6

这样作可以实现吗? 提供思路!
 
用FastReport比较好实现。

进入FR后拉一个Masterdata band,在其上再拉一个frChartView,双击后在"data"中的"for legent"写memo1(对应姓名),在"for values"中写memo3(对应报告数量)。

注意:在Form上放一个frChartObject。说起来罗嗦,实际是1分钟的事。[:)]
 
是SQL Server吗?如果是的话,直接看看帮助里的“交差表”概念,自己就可以轻松搞定啦。
 
对啊 ! 是交叉表
 
select 时间,
sum(case when 姓名='张三' then 数量 end) as [ 张三],
sum(case when 姓名='李四' then 数量 end) as [ 李四],
sum(case when 姓名='王五' then 数量 end) as [ 王五]
group by 时间
 
楼上说的交叉表只适应一定情况,SELECT语句最好动态生成,在服务器端执行动态SQL。
 
简单问题那样就可以了,当然如果人数不定的话,就要写个存储过程动态添加列了
 
对啊 现在就是人数不定啊

那么 这个存储过程如何建立啊
 
看看这里:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2464843
 
交叉表可以搞定,看SQL Server帮助吧!
 
如果只是想输出到报表中显示的话,用fastreport中的交叉表法也可以直接做
 
偶也想知道交叉表如何做,或者如何查交叉表
谢啦!
 
偶查了一下SQL联机文档,给出的方法也只是dez_0609的答案
估计通用的交叉表必须建立循环来写

请高手出招!
 
未经测试的,有错自己改一下吧!
create procedure cx
as
declare @xm varchar(20)
declare @st1 varchar(1000)
declare @st2 varchar(1000)
declare cur1 cursor for select distinct 姓名 from table
set @st1 = 'create table temp ('
drop table temp
open cur1
fetch cur1 into @xm
while @@fetch_status <> 0
begin
set @st1 = @st1 + @xm + ' int, '
set @st2 = 'sum(case when 姓名 = ''' + @xm + ''' then 数量 else 0 end) ' + @xm + ','
fetch cur into @xm
end
set @st1 = @st1 + ' 时间 datetime not null)'
exec(@st1)
set @st2 = 'insert into temp select ' + @st2 + ' 时间 from table group by 时间'
exec(@st2)
select * from temp
 
哈哈,我也不知道怎么会想起来的,上面的过程序还少了两句!就是在WHILE循环结束后加上下面的两句:
close cur1
dealocate cur1
 
如果只是想输出到报表中显示的话,用fastreport中的交叉表法也可以直接做
 
多人接受答案了。
 
后退
顶部