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


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

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

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
[求助]Select语句,痛点  发帖心情 Post By:2021/12/6 11:24:00 [显示全部帖子]

请老师帮助写个Select语句

开piao申请表有:所属机构、项目名称,开piao金额、开piao日期

进项piao录入表有:所属机构、项目名称,piao据类别(专piao、普piao)、价税合计金额、税额、税后金额、收到日期

我需要统计对应的:所属机构、项目名称,开piao日期与收到日期在同一年的开piao金额、收到的进项可抵扣增值税(专piao的税额),成本(专piao按扣税计算,普piao按价税合计金额计算)”

[此贴子已经被作者于2021/12/6 11:34:34编辑过]

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/6 11:46:00 [显示全部帖子]

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2021.5.29.1
错误所在事件:
详细错误信息:
关键字 'As' 附近有语法错误。
')' 附近有语法错误。
关键字 'Select' 附近有语法错误。

不知道是那一个报错

 


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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/6 12:47:00 [显示全部帖子]

老师,我以下两个表的分组统计怎么用s elect语句生成一个表,

开piao申请表
Dim g As New GroupTableBuilder("统计表2", DataTables("开piao申请"))
g.Groups.AddDef("所属机构")
g.Groups.AddDef("项目名称")
g.Groups.AddDef("登记日期", DateGroupEnum.Year, "年")
g.Groups.AddDef("登记日期", "月")

g.Totals.AddDef("开piao金额")
g.Decimals = 2
g.FromServer = True
g.Build()
MainTable = Tables("统计表2")

进项piao录入表
Dim g As New GroupTableBuilder("统计表3", DataTables("进项piao录入"))
g.Groups.AddDef("所属机构")
g.Groups.AddDef("项目名称")
g.Groups.AddDef("寄达日期", DateGroupEnum.Year, "年")
g.Groups.AddDef("寄达日期", "月")

g.Groups.AddDef("fa piao类别")
g.Totals.AddDef("税价合计金额")
g.Totals.AddDef("税额")
g.Totals.AddDef("税后金额")
g.Decimals = 2
g.FromServer = True
g.Build()
MainTable = Tables("统计表3")


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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/6 16:21:00 [显示全部帖子]

 老师,还是不是想要的结果,我做了个excel样表,另外把三个表数据都导出来做了一个示例,请老师看看


以下内容是专门发给有点蓝浏览

分组一:按照项目名称,按照之前思路,可能会出现数据丢失,所以需要确定是有项目名称都存在的表:合同签订

[此贴子已经被作者于2021/12/6 16:23:36编辑过]

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/6 17:31:00 [显示全部帖子]

还有个本办法就是手工编码统计,请老师看看怎么简化

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("所属机构", Gettype(String), 32)
dtb.AddDef("项目名称", Gettype(String), 100)
dtb.AddDef("合同金额", Gettype(Double))
dtb.AddDef("2021年1月_开piao金额", Gettype(Double))
dtb.AddDef("2021年1月_税价合计金额", Gettype(Double))
dtb.AddDef("2021年1月_可抵扣增值税", Gettype(Double))
dtb.AddDef("2021年1月_可抵扣成本", Gettype(Double))
dtb.AddDef("2021年2月_开piao金额", Gettype(Double))
dtb.AddDef("2021年2月_税价合计金额", Gettype(Double))
dtb.AddDef("2021年2月_可抵扣增值税", Gettype(Double))
dtb.AddDef("2021年2月_可抵扣成本", Gettype(Double))
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("2021年1月_开piao金额") = DataTables("开piao申请").Compute("Sum(开piao金额)","项目名称 = '" & nm(1) & "' And 登记日期 >= '2021-01-01' And 登记日期 <= '2021-01-31'")
    dr("2021年1月_税价合计金额") = DataTables("进项piao录入").Compute("Sum(税价合计金额)","项目名称 = '" & nm(1) & "' And 寄达日期 >= '2021-01-01' And 寄达日期 <= '2021-01-31'")
    dr("2021年1月_可抵扣增值税") = DataTables("进项piao录入").Compute("Sum(税额)","项目名称 = '" & nm(1) & "' And fa piao类别 = '专用' And 寄达日期 >= '2021-01-01' And 寄达日期 <= '2021-01-31'")
    dr("2021年1月_可抵扣成本") = dr("2021年1月_税价合计金额") - dr("2021年1月_可抵扣增值税")
    dr("2021年2月_开piao金额") = DataTables("开piao申请").Compute("Sum(开piao金额)","项目名称 = '" & nm(1) & "' And 登记日期 >= '2021-02-01' And 登记日期 <= '2021-02-28'")
    dr("2021年2月_税价合计金额") = DataTables("进项piao录入").Compute("Sum(税价合计金额)","项目名称 = '" & nm(1) & "' And 寄达日期 >= '2021-02-01' And 寄达日期 <= '2021-02-28'")
    dr("2021年2月_可抵扣增值税") = DataTables("进项piao录入").Compute("Sum(税额)","项目名称 = '" & nm(1) & "' And fa piao类别 = '专用' And 寄达日期 >= '2021-02-01' And 寄达日期 <= '2021-02-28'")
    dr("2021年2月_可抵扣成本") = dr("2021年2月_税价合计金额") - dr("2021年2月_可抵扣增值税")
Next

MainTable= Tables("统计")


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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/12/7 8:50:00 [显示全部帖子]

老师,sql语句对我太难了,直接放弃,改用代码手工统计应该最方便,数据表生成没问题了,但是统计哪儿需要核对登记日期的月与i是同月,请老师看看,条件哪儿和代码逻辑应该怎么修改?

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 "登记日期" .Month" = i")
    dr(d.Year & "年" & i & "月_税价合计金额") = DataTables("进项piao录入").Compute("Sum(税价合计金额)","项目名称 = '" & nm(1) & "' And 寄达日期.Month = i")
    dr(d.Year & "年" & i & "月_可抵扣增值税") = DataTables("进项piao录入").Compute("Sum(税额)","项目名称 = '" & nm(1) & "' And fa piao类别 = '专用' And 寄达日期.Month = i")
    dr(d.Year & "年" & i & "_可抵扣成本") = dr(d.Year & "年" & i & "月_税价合计金额") - dr(d.Year & "年" & i & "月_可抵扣增值税")
Next

[此贴子已经被作者于2021/12/7 8:51:46编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  7楼 | 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
  8楼 | 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
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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


 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  10楼 | 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编辑过]

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