以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]统计表合并问题(已经解决) (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=44215) |
||||
-- 作者:cqlwsam -- 发布时间:2013/12/25 15:52:00 -- [求助]统计表合并问题(已经解决) 如图,通过“统计”按钮将textbox2中的字符串按“vbcrlf”、“;”及“:”逐级拆分,得到若干字符串,组成形成sql语句,每一个"vbcrlf"形成一个sql语句进行统计。统计表的个数与“vbcrlf”拆分后形成的字符串个数相同。现在需要对统计表进行合并,用于图表绘制。统计表合并得不到想要的结果。不知道代码的问题出在哪儿? 例子见:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=44164&page=2 “统计”的click的代码如下: Dim d1,d2 As String Dim kind,tongji As String Dim sql As String Dim str As String= e.Form.Controls("TextBox2").value Dim n As Integer Dim strs() As String strs =str.replace(vbcr,"").Split(vblf) n=strs.Length Dim dts(n-1) As fxDataSource For i As Integer = 0 To n-1 If strs(i)>"" Then Dim s() As String=strs(i).Split(";") For j As Integer = 0 To s.Length-1 If s(j)<>"" Then If s(j).Contains("统计项目") Then Dim ss() As String=s(j).Split(";") For Each s1 As String In ss tongji=s1.split(":")(1) Next End If If s(j).contains("开始时间") Then Dim ss() As String=s(j).Split(";") For Each s1 As String In ss If s1.split(":")(1)="无" Then d1="" Else d1=s1.split(":")(1) End If Next End If If s(j).contains("截止时间") Then Dim ss() As String=s(j).Split(";") For Each s1 As String In ss If s1.split(":")(1)="无" Then d2="" Else d2=s1.split(":")(1) End If Next End If If s(j).contains("患者种类") Then Dim ss() As String=s(j).Split(";") For Each s1 As String In ss kind=s1.split(":")(1) Next End If End If Next If d1="" Then If d2="" Then If kind="无" OrElse kind="预约患者(登记时间)" Then sql="select * from {基本情况}" Else If kind="住院患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'已入院\'" Else If kind="推迟入院(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'推迟入院\'" Else If kind="失访患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'无法联系\'" Else If kind="入院患者(入院日期)" Then sql="select * from {基本情况} where 情况说明=\'已入院\'" Else If kind="预约患者(入院日期)" Then sql="select * from {基本情况} where (情况说明<>\'推迟入院\'or 情况说明<>\'无法联系\')" End If Else If kind="无" OrElse kind="预约患者(登记时间)" Then sql="select * from {基本情况} where 登记日期<d2" Else If kind="住院患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'已入院\' and 登记日期<#" & d2 & "#" Else If kind="推迟入院(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'推迟入院\'and 登记日期<#" & d2 & "#" Else If kind="失访患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'无法联系\'and 登记日期<#" & d2 & "#" Else If kind="入院患者(入院日期)" Then sql="select * from {基本情况} where 情况说明=\'已入院\'and 预约日期<#" & d2 & "#" Else If kind="预约患者(入院日期)" Then sql="select * from {基本情况} where (情况说明<>\'推迟入院\'or 情况说明<>\'无法联系\') and 预约日期<#" & d2 & "#" End If End If Else If d2="" Then If kind="无" OrElse kind="预约患者(登记时间)" Then sql="select * from {基本情况} where 登记日期>#" & d1 & "#" Else If kind="住院患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'已入院\' And 登记日期>#" & d1 & "#" Else If kind="推迟入院(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'推迟入院\'and 登记日期>#" & d1 & "#" Else If kind="失访患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'无法联系\'and 登记日期>#" & d1 & "#" Else If kind="入院患者(入院日期)" Then sql= "select * from {基本情况} where 情况说明=\'已入院\'and 预约日期>#" & d1 & "#" Else If kind="预约患者(入院日期)" Then sql="select * from {基本情况} where (情况说明<>\'推迟入院\'or 情况说明<>\'无法联系\') and 预约日期>#" & d1 & "#" End If Else If kind="无" OrElse kind="预约患者(登记时间)" Then sql="select * from {基本情况} where 登记日期<#" & d2 & "# And 登记日期>#" & d1 & "#" Else If kind="住院患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'已入院\' and 登记日期<#" & d2 & "# And 登记日期>#" & d1 & "#" Else If kind="推迟入院(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'推迟入院\'and 登记日期<#" & d2 & "# And 登记日期>#" & d1 & "#" Else If kind="失访患者(登记时间)" Then sql="select * from {基本情况} where 情况说明=\'无法联系\'and 登记日期<#" & d2 & "# And 登记日期>#" & d1 & "#" Else If kind="入院患者(入院日期)" Then sql= "select * from {基本情况} where 情况说明=\'已入院\'and 预约日期<#" & d2 & "# And 预约日期>#" & d1 & "#" Else If kind="预约患者(入院日期)" Then sql="select * from {基本情况} where (情况说明<>\'推迟入院\'or 情况说明<>\'无法联系\') and 预约日期<#" & d2 & "# And 预约日期>#" & d1 & "#" End If End If End If MessageBox.Show(d1,"提示") MessageBox.Show(d2,"提示") MessageBox.Show(kind,"提示") MessageBox.Show(sql,"提示") If t Then Dim g As New GroupTableBuilder("统计表",sql) g.Caption = "性别统计" g.Groups.AddDef("性别", "", "性别") g.Totals.AddDef("姓名", AggregateEnum.Count,"","病例数") dts(i) = g.BuildDataSource() End If End If Next For i As Integer =1 To n-1 dts(0).Combine("性别",dts(i),"性别") Next forms("统计图形").Open Tables("统计图形_Table1").DataSource = dts(0) [此贴子已经被作者于2013-12-27 18:39:16编辑过]
|
||||
-- 作者:cqlwsam -- 发布时间:2013/12/25 17:33:00 -- 是我的代码的写法有问题,还是这种思路没办法实现? |
||||
-- 作者:cqlwsam -- 发布时间:2013/12/25 17:35:00 -- [求助]统计表合并问题 还有一个办法,就是没确定一个条件就保存为excel文件,在excel里面去进行处理 [此贴子已经被作者于2013-12-25 17:35:28编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2013/12/25 20:35:00 -- 如下例子
|
||||
-- 作者:cqlwsam -- 发布时间:2013/12/25 21:40:00 -- 谢谢有点甜。但例子中并没有实现统计表的合并。 如:textbox2中的字符串为: 登记时间:是;入院时间:否;开始时间:2013/1/1;截止时间:2013/12/12;患者种类:预约患者(登记时间);统计项目:性别. 登记时间:是;入院时间:否;开始时间:2013/1/1;截止时间:2013/12/12;患者种类:失访患者(登记时间);统计项目:性别. 得到的结果应该:两组数据才对。
|
||||
-- 作者:有点甜 -- 发布时间:2013/12/25 22:16:00 -- 得到的是两组数据,但是在代码的最后,你不是按性别分组统计了么? g.Groups.AddDef("性别", "", "性别") g.Totals.AddDef("姓名", AggregateEnum.Count,"","病例数") |
||||
-- 作者:cqlwsam -- 发布时间:2013/12/25 22:32:00 -- 可能是没有表达清楚。两组数据合并在一个表里。 代码中: If t Then Dim g As New GroupTableBuilder("统计表",sql) g.Caption = "性别统计" g.Groups.AddDef("性别", "", "性别") g.Totals.AddDef("姓名", AggregateEnum.Count,"","病例数") dts(i) = g.BuildDataSource() End If End If Next For i As Integer =1 To n-1 dts(0).Combine("性别",dts(i),"性别") Next forms("统计图形").Open Tables("统计图形_Table1").DataSource = dts(0) 按拆分结果进行循环,得到sql,分组统计,得到统计表,赋值给dts(i),然后通过combine链接,赋值给“统计图形_table1”。 |
||||
-- 作者:有点甜 -- 发布时间:2013/12/25 22:40:00 -- 嗯嗯,我明白你的意思了,小改了一下你的代码,如下,测试有效
|
||||
-- 作者:cqlwsam -- 发布时间:2013/12/25 23:15:00 -- [求助]统计表合并问题 可以得到两组数据,但是根据统计条件第二组数据应该与第一组不相同。你把下面的内容复制进textbox2中,就知道了。 登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 预约患者(登记时间);统计项目: 性别. 登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 失访患者(登记时间);统计项目: 性别. [此贴子已经被作者于2013-12-25 23:16:37编辑过]
|
||||
-- 作者:cqlwsam -- 发布时间:2013/12/26 18:23:00 -- 可以得到两组数据,但是根据统计条件第二组数据应该与第一组不相同。你把下面的内容复制进textbox2中,就知道了。 登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 预约患者(登记时间);统计项目: 性别. 登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 失访患者(登记时间);统计项目: 性别. [
|