以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]数组相关  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118742)

--  作者:积水成渊
--  发布时间:2018/5/10 8:54:00
--  [求助]数组相关
函数:GetValues是从表中筛选不重复的数据以集合的形式返回,我现在需要不去除重复,有没有类似的函数
[此贴子已经被作者于2018/5/10 8:54:39编辑过]

--  作者:有点甜
--  发布时间:2018/5/10 9:17:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/0400.htm

 


--  作者:积水成渊
--  发布时间:2018/5/10 9:56:00
--  
老师,麻烦帮我改下这段代码,datarow怎么转换成double类型:
Dim r As Row = Tables("工作业绩").Current
Dim drs As List(Of DataRow)
Dim Arys() As DataRow
drs = DataTables("工作业绩进度记录").Select("[Cid] = \'" & r("Pid") & "\'")
Arys = drs.ToArray() 
array.sort(Arys)
Dim sum As Double = 0
For i As Integer = 1 To Arys.length - 2
    sum += Arys(i)
    output.show(Arys(i))
Next
msgbox(sum / (Arys.length - 2))

[此贴子已经被作者于2018/5/10 9:56:36编辑过]

--  作者:有点甜
--  发布时间:2018/5/10 10:15:00
--  

Dim r As Row = Tables("工作业绩").Current
Dim drs As List(Of DataRow)
drs = DataTables("工作业绩进度记录").Select("[Cid] = \'" & r("Pid") & "\'", "某列")

Dim sum As Double = 0
For i As Integer = 1 To drs.count - 2
    sum += drs(i)("某列")
    output.show(drs(i)("某列"))
Next
msgbox(sum / (drs.count - 2))


--  作者:积水成渊
--  发布时间:2018/5/10 10:26:00
--  
感谢老师,问题解决了
--  作者:积水成渊
--  发布时间:2018/5/10 11:02:00
--  
老师,经过测试发现一个问题,这段代码其实我是想通过数组,去除一个最高值,和一个最低值之后求平均值的,老师帮我修改后的代码在正数的情况可以无误的求出平均值,但是在有负数的情况下,这个代码求出来的平均值就不正确了,例如我我通过代码获取的集合是{1,-1,5},代码求出的平均值为-1,二实际上我需要算出的平均数应该为1。所以这段代码还应该如何处理下:
Dim r As Row = Tables("工作业绩").Current
Dim drs As List(Of DataRow)
drs = DataTables("工作业绩进度记录").Select("[Cid] = \'" & r("Pid") & "\'", "进度")
Dim sum As Double = 0
For i As Integer = 1 To drs.count - 2
    sum += drs(i)("进度")
    output.show(drs(i)("进度"))
Next
r("进度") = sum / (drs.count - 2)

--  作者:有点甜
--  发布时间:2018/5/10 11:05:00
--  

1、你进度列,必须是【整数或者双精度小数】

 

2、drs = DataTables("工作业绩进度记录").Select("[Cid] = \'" & r("Pid") & "\'", "进度") 是排序了的


--  作者:积水成渊
--  发布时间:2018/5/10 11:27:00
--  
感谢
--  作者:积水成渊
--  发布时间:2018/5/10 16:13:00
--  
因为进度字段需要设置成真实值与显示值的效果,所以只能设置成字符型,如果将进度字段设置成整型或者浮点型,那么界面上的显示值就为空白了。所有我舍弃了这种集合的方式求平均值,直接用SQL语句来实现平均值的求法。
Dim t1 As Table = Tables("不足之处")
Dim r As Row = t1.Current
Dim cmd As New SQLCommand
Dim avg As double
cmd.C
cmd.CommandText = "selec t (SUM(convert(numeric(28,3),同事评价))-MAX(convert(numeric(28,3),同事评价))-MIN(convert(numeric(28,3),同事评价)))/(case when count(*)>=3 then (count(*)-2) else count(*) end) f rom {创新展示评价记录} where Cid = \'" & r("Pid") & "\'"
avg = cmd.ExecuteScalar()
r("同事评价") = avg
t1.Save
[此贴子已经被作者于2018/5/10 16:17:36编辑过]

--  作者:有点甜
--  发布时间:2018/5/10 16:15:00
--  
再加入一个表达式列,引用【进度】列的值即可。使用此表达式列处理。