以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]Select语句,痛点  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=173570)

--  作者:cd_tdh
--  发布时间:2021/12/6 11:24:00
--  [求助]Select语句,痛点

请老师帮助写个Select语句

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

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

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

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

--  作者:有点蓝
--  发布时间:2021/12/6 11:38:00
--  
select a.*,b.价税合计金额,b.税额(select 所属机构,项目名称,year(开piao日期) as 年,sum(开piao金额) as 开piao金额 from 开piao申请 group by 所属机构,项目名称,year(开piao日期) ) as a inner join(select 所属机构,项目名称,year(收到日期) as 年,sum(价税合计金额) as 价税合计金额,sum(税额) as 税额 from 进项piao录入 group by 所属机构,项目名称,year(收到日期)) as b on a.所属机构=b.所属机构 and a.项目名称=b.项目名称 and a.年=b.年
--  作者:cd_tdh
--  发布时间:2021/12/6 11:46:00
--  

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

不知道是那一个报错

 


--  作者:有点蓝
--  发布时间:2021/12/6 11:47:00
--  
select a.*,b.价税合计金额,b.税额 from (select 所属机构,项目名称
--  作者:cd_tdh
--  发布时间:2021/12/6 12:47:00
--  

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

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

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

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

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


--  作者:有点蓝
--  发布时间:2021/12/6 13:44:00
--  
就是2楼的用法,加一个月份即可
--  作者:cd_tdh
--  发布时间:2021/12/6 16:21:00
--  

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


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

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

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

--  作者:cd_tdh
--  发布时间: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月_开票金额", Gettype(Double))
dtb.AddDef("2021年1月_税价合计金额", Gettype(Double))
dtb.AddDef("2021年1月_可抵扣增值税", Gettype(Double))
dtb.AddDef("2021年1月_可抵扣成本", Gettype(Double))
dtb.AddDef("2021年2月_开票金额", 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月_开票金额") = DataTables("开票申请").Compute("Sum(开票金额)","项目名称 = \'" & nm(1) & "\' And 登记日期 >= \'2021-01-01\' And 登记日期 <= \'2021-01-31\'")
    dr("2021年1月_税价合计金额") = DataTables("进项票录入").Compute("Sum(税价合计金额)","项目名称 = \'" & nm(1) & "\' And 寄达日期 >= \'2021-01-01\' And 寄达日期 <= \'2021-01-31\'")
    dr("2021年1月_可抵扣增值税") = DataTables("进项票录入").Compute("Sum(税额)","项目名称 = \'" & nm(1) & "\' And 发票类别 = \'专用\' And 寄达日期 >= \'2021-01-01\' And 寄达日期 <= \'2021-01-31\'")
    dr("2021年1月_可抵扣成本") = dr("2021年1月_税价合计金额") - dr("2021年1月_可抵扣增值税")
    dr("2021年2月_开票金额") = DataTables("开票申请").Compute("Sum(开票金额)","项目名称 = \'" & nm(1) & "\' And 登记日期 >= \'2021-02-01\' And 登记日期 <= \'2021-02-28\'")
    dr("2021年2月_税价合计金额") = DataTables("进项票录入").Compute("Sum(税价合计金额)","项目名称 = \'" & nm(1) & "\' And 寄达日期 >= \'2021-02-01\' And 寄达日期 <= \'2021-02-28\'")
    dr("2021年2月_可抵扣增值税") = DataTables("进项票录入").Compute("Sum(税额)","项目名称 = \'" & nm(1) & "\' And 发票类别 = \'专用\' And 寄达日期 >= \'2021-02-01\' And 寄达日期 <= \'2021-02-28\'")
    dr("2021年2月_可抵扣成本") = dr("2021年2月_税价合计金额") - dr("2021年2月_可抵扣增值税")
Next

MainTable= Tables("统计")


--  作者:有点蓝
--  发布时间:2021/12/6 17:35:00
--  
没有办法直接生成这种效果表,只能按照sql生成查询表,然后再做一个交叉统计

select a.*,b.税价合计金额,b.税额 from (select 所属机构,项目名称,year(登记日期) as 年,month(登记日期) as 月,sum(开票金额) as 开票金额 from {开票申请} group by 所属机构,项目名称,year(登记日期),month(登记日期) ) as a inner join ( select 所属机构,项目名称,year(登记日期) as 年,month(登记日期) as 月,sum(税价合计金额) as 税价合计金额,sum(税额) as 税额 from {进项票录入} group by 所属机构,项目名称,year(登记日期),month(登记日期)) as b on  a.所属机构=b.所属机构 where a.项目名称=b.项目名称 and a.年=b.年 and a.月=b.月

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

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