以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  sqlselct 找出来行数据之后 的计算方法  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=80950)

--  作者:fubblyc
--  发布时间:2016/2/14 8:38:00
--  sqlselct 找出来行数据之后 的计算方法
刚才大概看下论坛,发现大红袍老师,Hyphen 老师等已经在12号就开始为小狐们答疑了,大红袍老师最后一条回复是昨晚凌晨0:17,感动啊!!!
衷心祝愿所有热心的工程师 新年发大财!!更祝福 狐爸 狐表 发展的越来越好!!!我现在可真的是狐表的铁杆粉丝!!

遇到一个问题,应该算是比较基础的,不过查了 帮助 和论坛 都没看到怎么解决,贴出来给伟大的工程师们瞧瞧!







--  作者:fubblyc
--  发布时间:2016/2/14 8:39:00
--  
    Dim gvdid As List(of DataRow) 
    Dim cmd4 As New SQLCommand
    cmd4.C
    cmd4.CommandText = "S ELECT * From {GatheringVouchDetail} Where [fchrGatheringVouchDetailID] Is not Null"
    Dim dt4 As DataTable = cmd4.ExecuteReader()
    gvdid = dt4.SQLs elect("[fchrGatheringVouchID] = \'"& gvid &"\' ")   \'通过 上一个参数 主表id (gvid) 得出所有的子表id (gvdid)

    Dim cmd5 As New SQLCommand
    cmd5.C
    cmd5.CommandText = "S ELECT * From {StoredCardRecord} Where [fchrStoredCardID] Is not Null"
    Dim dt5 As DataTable = cmd5.ExecuteReader()
ykje = dt5.sqlCompute("Sum(flotCurrentAmount)","fchrGatheringVouchDetailID = \'"& gvdid &"\'") \'计算所有符合 上面筛选出来的数组 gvdid里的子表id  的当前值

这样做肯定是不对的,因为 gvdid  不是具体的一行,而是多行。。。
而是要用遍历,那要怎么做呢?
[此贴子已经被作者于2016/2/14 8:41:51编辑过]

--  作者:fubblyc
--  发布时间:2016/2/14 8:47:00
--  
是不是这样:

ykje = dt5.sqlCompute("Sum(flotCurrentAmount)","fchrGatheringVouchDetailID in gvdid )   用 in  ,在这个集合里的行。。。

--  作者:Hyphen
--  发布时间:2016/2/14 9:41:00
--  
试试用连接直接求和:

Dim cmd4 As New SQLCommand
cmd4.C
cmd4.CommandText = "S ELECT c.fchrGatheringVouchDetailID ,Sum(c.flotCurrentAmount) as 求和 From {GatheringVouchDetail} as gvd inner join {StoredCardRecord} as c on gvd.fchrGatheringVouchDetailID = c.fchrGatheringVouchDetailID wh ere gvd.fchrGatheringVouchID = \'" & gvid & "\' group by c.fchrGatheringVouchDetailID "
Dim val As Integer = cmd4.ExecuteScalar()
msgbox(val)

--  作者:大红袍
--  发布时间:2016/2/15 9:06:00
--  

参考4楼的方法,如果你要用到集合,你必须把主键合并成字符串,才能用in的,如

 

http://www.foxtable.com/help/topics/2228.htm