Foxtable(狐表)用户栏目专家坐堂 → [求助]Select语句,痛点


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

主题:[求助]Select语句,痛点

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


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/7 9:33:00 [只看该作者]

表达式没有计算月份的用法,添加一个辅助列,保存月份值。根据月份列计算

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/7 9:47:00 [只看该作者]

这样可以了,在请教一下老师,后面在统计时,把相应的数据填入对应的名称,对应月的列中怎么修改?

Dim d As Date = Date.Today
Dim i As Integer
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("所属机构", Gettype(String), 32)
dtb.AddDef("项目名称", Gettype(String), 100)
dtb.AddDef("合同金额", Gettype(Double))
For i = 1 To d.Month
    dtb.AddDef(d.Year & "年" & i & "月_开piao金额" , Gettype(Double))
    dtb.AddDef(d.Year & "年" & i & "月_税价合计金额" , Gettype(Double))
    dtb.AddDef(d.Year & "年" & i & "月_可抵扣增值税" , Gettype(Double))
    dtb.AddDef(d.Year & "年" & i & "月_可抵扣成本" , Gettype(Double))
Next
dtb.Build() '生产统计表
For Each nm() As String In DataTables("合同签订").sqlGetValues("所属机构|项目名称|合同金额")
    Dim dr As DataRow = DataTables("统计").AddNew()
    dr("所属机构") = nm(0)
    dr("项目名称") = nm(1)
    dr("合同金额") = nm(2)
    下面的数据填入对应的月的列中
    dr(d.Year & "年" & i & "月_开piao金额") = DataTables("开piao申请").Compute("Sum(开piao金额)","项目名称 = '" & nm(1) & "' And 登记日期 >= '" & d.Year & "-" & i & "-01" & "' And 登记日期 <= '" & d.Year & "-" & i & "-" & Date.DaysInMonth(d.Year,i)  & "'")
    dr(d.Year & "年" & i & "月_税价合计金额") = DataTables("进项piao录入").Compute("Sum(税价合计金额)","项目名称 = '" & nm(1) & "' And 寄达日期 >= '" & d.Year & "-" & i & "-01" & "' And  寄达日期 <= '" & d.Year & "-" & i & "-" & Date.DaysInMonth(d.Year,i) & "'")
    dr(d.Year & "年" & i & "月_可抵扣增值税") = DataTables("进项piao录入").Compute("Sum(税额)","项目名称 = '" & nm(1) & "' And fa piao类别 = '专用' And 寄达日期 >= '" & d.Year & "-" & i & "-01" & "' And 寄达日期 <= '" & d.Year & "-" & i & "-" & Date.DaysInMonth(d.Year,i) & "'")
    dr(d.Year & "年" & i & "月_可抵扣成本") = dr(d.Year & "年" & i & "月_税价合计金额") - dr(d.Year & "年" & i & "月_可抵扣增值税")
   
Next
MainTable= Tables("统计")

[此贴子已经被作者于2021/12/7 9:54:02编辑过]

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/7 10:17:00 [只看该作者]

解决了,里面在多加一个循环就可以了

For Each nm() As String In DataTables("合同签订").sqlGetValues("所属机构|项目名称|合同金额")
    Dim dr As DataRow = DataTables("统计").AddNew()
    dr("所属机构") = nm(0)
    dr("项目名称") = nm(1)
    dr("合同金额") = nm(2)
    For i = 1 To d.Month
        dr(d.Year & "年" & i & "月_开piao金额") = DataTables("开piao申请").Compute("Sum(开piao金额)","项目名称 = '" & nm(1) & "' And 登记日期 >= '" & d.Year & "-" & i & "-01" & "' And 登记日期 <= '" & d.Year & "-" & i & "-" & Date.DaysInMonth(d.Year,i)  & "'")
        dr(d.Year & "年" & i & "月_税价合计金额") = DataTables("进项piao录入").Compute("Sum(税价合计金额)","项目名称 = '" & nm(1) & "' And 寄达日期 >= '" & d.Year & "-" & i & "-01" & "' And  寄达日期 <= '" & d.Year & "-" & i & "-" & Date.DaysInMonth(d.Year,i) & "'")
        dr(d.Year & "年" & i & "月_可抵扣增值税") = DataTables("进项piao录入").Compute("Sum(税额)","项目名称 = '" & nm(1) & "' And fa piao类别 = '专用' And 寄达日期 >= '" & d.Year & "-" & i & "-01" & "' And 寄达日期 <= '" & d.Year & "-" & i & "-" & Date.DaysInMonth(d.Year,i) & "'")
        dr(d.Year & "年" & i & "月_可抵扣成本") = dr(d.Year & "年" & i & "月_税价合计金额") - dr(d.Year & "年" & i & "月_可抵扣增值税")
    Next
Next
MainTable= Tables("统计")


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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/7 10:20:00 [只看该作者]

这个比写SQl简单明白,一般的都能看懂,以后这种复杂的还是直接放弃SQl吧,没点功底的还真写不出


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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/7 12:49:00 [只看该作者]

在请教一下老师,这代码怎么优化可以加快速度

 

Dim cmd1 As New SQLCommand
Dim dt1 As DataTable
cmd1.C
cmd1.CommandText = "S ELECT DISTINCT 所属机构,项目名称,合同金额 From {合同签订}"
dt1 = cmd1.ExecuteReader()

Dim cmd2 As New SQLCommand
Dim dt2 As DataTable
cmd2.C
cmd2.CommandText = "S ELECT DISTINCT 项目名称,开piao金额,登记日期 From {开piao申请}"
dt2 = cmd2.ExecuteReader()

Dim cmd3 As New SQLCommand
Dim dt3 As DataTable
cmd3.C
cmd3.CommandText = "S ELECT * FROM {进项piao录入}"
dt3 = cmd3.ExecuteReader()

Dim d As Integer = e.Form.Controls("所属年度").value
Dim m As Date = Date.Today
Dim i As Integer
Dim dtb As New DataTableBuilder("进项piao分年月统计")
dtb.AddDef("所属机构", Gettype(String), 32)
dtb.AddDef("项目名称", Gettype(String), 100)
dtb.AddDef("合同金额", Gettype(Double))
For i = 1 To m.Month
    dtb.AddDef(d & "年" & i & "月_开piao金额" , Gettype(Double))
    dtb.AddDef(d & "年" & i & "月_税价合计金额" , Gettype(Double))
    dtb.AddDef(d & "年" & i & "月_可抵扣增值税" , Gettype(Double))
    dtb.AddDef(d & "年" & i & "月_可抵扣成本" , Gettype(Double))
Next
dtb.Build() '生成统计表

For Each nm() As String In dt1.GetValues("所属机构|项目名称|合同金额")
    Dim dr As DataRow = DataTables("进项piao分年月统计").AddNew()
    dr("所属机构") = nm(0)
    dr("项目名称") = nm(1)
    dr("合同金额") = nm(2)
    For i = 1 To m.Month
        dr(d & "年" & i & "月_开piao金额") = dt2.Compute("Sum(开piao金额)","项目名称 = '" & nm(1) & "' And 登记日期 >= '" & d & "-" & i & "-01" & "' And 登记日期 <= '" & d & "-" & i & "-" & Date.DaysInMonth(d,i)  & "'")
        dr(d & "年" & i & "月_税价合计金额") = dt3.Compute("Sum(税价合计金额)","项目名称 = '" & nm(1) & "' And 寄达日期 >= '" & d & "-" & i & "-01" & "' And  寄达日期 <= '" & d & "-" & i & "-" & Date.DaysInMonth(d,i) & "'")
        dr(d & "年" & i & "月_可抵扣增值税") = dt3.Compute("Sum(税额)","项目名称 = '" & nm(1) & "' And fa piao类别 = '专用' And 寄达日期 >= '" & d & "-" & i & "-01" & "' And 寄达日期 <= '" & d & "-" & i & "-" & Date.DaysInMonth(d,i) & "'")
        dr(d & "年" & i & "月_可抵扣成本") = dr(d & "年" & i & "月_税价合计金额") - dr(d & "年" & i & "月_可抵扣增值税")
    Next
Next
'MainTable= Tables("进项piao分年月统计")
Tables("进项piao分年月统计_Table1").DataSource = DataTables("进项piao分年月统计")

[此贴子已经被作者于2021/12/7 13:30:06编辑过]

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


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/7 13:36:00 [只看该作者]

只取今年的数据

cmd1.CommandText = "S ELECT DISTINCT 所属机构,项目名称,合同金额 From {合同签订} where xx日期>='2021-01-01'"

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/7 14:10:00 [只看该作者]

只取今年的不行,因为开piao的项目和进项piao的项目往年也有的

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


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/7 14:14:00 [只看该作者]

Compute不都有日期限定了吗?不都是今年的吗?"' And 登记日期 >= '" & d & "-" & i & "-01" & "' A

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/7 14:15:00 [只看该作者]

开piao申请和进项piao录入只取今年的没问题,目前测试的开piao申请只有2年数据,1000多条,进项piao录入里面只有今年数据,4000多条


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


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/7 14:26:00 [只看该作者]

这种用法,除了减少加载的数据,没有其它办法的。

 回到顶部
总数 22 上一页 1 2 3 下一页