日期:2014-05-20  浏览次数:20801 次

菜鸟又遇一问题,关于交叉表
最近工作需要自学水晶报表,一直参考阿泰哥的教程学的不亦乐乎。
可到了交叉报表悲剧了,因为木有这个教程,于是又找了篇《水晶报表交叉表及数据过滤基础篇》参考,可这个是winform的,我是在webform使用,内容其实无觉着还挺详细,但在我这就是出不来东啊。不废话了,下面细说!
这是我参照别人说的写的SQL:
select datetime, sum( case TextType when '空柜查询' then iCount end ) as '空柜查询',
sum(case TextType when '拖车座柜查询' then iCount end) as '拖车座柜查询',
sum(case TextType when '集装箱查询' then iCount end) as '集装箱查询' from IMenuStats 
group by datetime
具体表结构为
数据来源于表IMenuStats,表中内容如下:
datetime TextType iCount
5月1日 空柜查询 25
5月1日 拖车做柜查询 35
5月1日 集装箱查询 28
5月2日 空柜查询 27
5月2日 拖车做柜查询 30
5月2日 集装箱查询 32
5月3日 空柜查询 17
5月3日 拖车做柜查询 19
5月3日 集装箱查询 21
可问题来了,我这么写在SQLSERVER里看了下,都能搜出来,可我往dataset里放的时候就不行了,dataset结构如下
table名字:
  myTable
table字段:
  datetime
  TextType
  iCount
字段类型我设置的datetime,texttype都是string,因为我在数据库里是char的,iCount是int

代码是:
  string sql = @"select datetime, sum( case TextType when '空柜查询' then iCount end ) as '空柜查询',
sum(case TextType when '拖车座柜查询' then iCount end) as '拖车座柜查询',
sum(case TextType when '集装箱查询' then iCount end) as '集装箱查询' from IMenuStats 
group by datetime";
  SqlConnection conn = new SqlConnection(str);
  conn.Open();
  SqlDataAdapter da = new SqlDataAdapter(sql, conn);
  conn.Close();
  DataSet1 ds1 = new DataSet1();
  da.Fill(ds1, "myTable");
  ReportDocument report = new ReportDocument();
  string reportPath=Server.MapPath("crystalreport1.rpt");
  report.Load(reportPath);
  report.SetDataSource(ds1.Tables[0]);
  CrystalReportViewer1.ReportSource = report;
是不是我对交叉表使用理解错了?
反正是个小白,求指导

------解决方案--------------------
可我往dataset里放的时候就不行了

怎么不行?
------解决方案--------------------
探讨

引用:

可我往dataset里放的时候就不行了

怎么不行?

周末木有网,没有看到,今天一大早就来看帖子了,谢大虾来关注了

我其实指的是执行完查询后放到dataset里后debug看的那个table里只有第一个时间的字段有东西,别的都没有。。。

------解决方案--------------------
探讨

好吧,我自己解决了,我把VS想的太白痴了。。。。原来他的交叉表没必要自己去写那么复杂的SQL句子,只需要查到对应字段就行了,剩下的他自己就都完成了啊。。。。

------解决方案--------------------
探讨
好吧,我自己解决了,我把VS想的太白痴了。。。。原来他的交叉表没必要自己去写那么复杂的SQL句子,只需要查到对应字段就行了,剩下的他自己就都完成了啊。。。。