Foxtable(狐表)用户栏目专家坐堂 → 按照另一个表开始、截止日期统计年度


  共有2828人关注过本帖树形打印复制链接

主题:按照另一个表开始、截止日期统计年度

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 11:22:00 [显示全部帖子]

方法一:加入【年度】列,跨表查找某条数据属于哪个年份。然后根据【年度】统计。

 

方法二:那就必须自己编写代码统计了,在统计过程中查找日期年份范围。

 

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

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 12:43:00 [显示全部帖子]

参考

 

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("所属机构", Gettype(String), 16)
dtb.AddDef("年", Gettype(Integer))
dtb.AddDef("金额", Gettype(Double))
dtb.Build()
Dim minyear = 2015
Dim maxyear = 2018
For Each nm As String In DataTables("表B").GetValues("所属机构")
    Dim fdr = DataTables("表A").find("所属机构='" & nm & "'")
    For i As Integer = minyear To maxyear
        Dim dr As DataRow = DataTables("统计").AddNew()
        dr("所属机构") = nm
        dr("年") = i
        Dim d1 As Date = fdr("起始日期")
        d1 = new Date(i, d1.month, d1.Day)
       
        Dim d2 As Date = fdr("截止日期")
        d2 = new Date(i+1, d2.month, d2.Day)
        Dim filter As String = "所属机构='" & nm & "' and 中标日期>=#" & d1 & "# and 中标日期<=#" & d2 & "#"
        msgbox(filter)
        dr("金额") = DataTables("表B").Compute("Sum(中标金额)",filter)
    Next
Next
MainTable= Tables("统计")


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 14:21:00 [显示全部帖子]

sqlTable只能一个单表;sqlQuery可以多表。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 14:42:00 [显示全部帖子]

以下是引用cd_tdh在2018/9/17 14:39:00的发言:
sqlQuery还能在分页不啊?我在分页不对。

 

参考这种方式分页 http://www.foxtable.com/webhelp/scr/2721.htm

 

合成对应的sql语句,然后重新fill才行。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 14:54:00 [显示全部帖子]

如果你需要这样的标题,你需要的是交叉统计?

 

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

 

不然,你这样做肯定是不对的,因为年度统计列,显示的是多个机构的数据。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 15:35:00 [显示全部帖子]

看看这里

 

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

 

比如代码

 

Dim r As Row
For i As Integer = 0 To Tables("统计").Rows.Count(True) - 1
    r = Tables("统计").Rows(i,True)
    If r.IsGroup AndAlso r.Level = 0 Then
        r("所属机构") = Tables("统计").Rows(i-1,True)("所属机构")
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 17:21:00 [显示全部帖子]


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/18 9:48:00 [显示全部帖子]

你用的是sqlserver还是access?如果是sqlserver,是没有iif函数de;如果是access,datediff函数那里,yyyy要用单引号包裹的 'yyyy'

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/18 10:18:00 [显示全部帖子]

 

case when 中标日期 > 统计年份 then

 

统计年份,不能直接用的,这个列,是select之后才生成的,你要改成 dateadd(yyyy,datediff(yyyy,承包合同_起始日期,中标日期),承包合同_起始日期)

 

 

[此贴子已经被作者于2018/9/18 10:18:07编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/18 11:01:00 [显示全部帖子]

以下是引用cd_tdh在2018/9/18 10:30:00的发言:

这样生成的列名Column1怎么去修改呢?比如改为:所属年度

 

这个意思?

 

(case when 中标日期 > dateadd(yyyy,datediff(yyyy,承包合同_起始日期,中标日期),承包合同_起始日期) then datediff(yyyy,承包合同_起始日期,中标日期) + year(承包合同_起始日期) else datediff(yyyy,承包合同_起始日期,中标日期) + year(承包合同_起始日期) -1 end) as 所属年度


 回到顶部
总数 11 1 2 下一页