Foxtable(狐表)用户栏目专家坐堂 → 从不同的表调用数据生成报表


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

主题:从不同的表调用数据生成报表

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
从不同的表调用数据生成报表  发帖心情 Post By:2018/12/12 11:40:00 [只看该作者]

老师,我想从不同的表调用数据生成报表,请问以下两段代码怎么合并

Dim Book As New XLS.Book(ProjectPath & "Attachments\分项工程中期支付汇总表.xlsx")

Dim fl As String = ProjectPath & "Reports\分项工程中期支付汇总表.xlsx"

Dim filter As String = DataTables("中间计量表").loadfilter

filter = IIF(filter > ""," where " & filter,"")

book.AddDataTable("分项工程中期支付汇总表","xlgl","selec t 项目名称,施工合同段,章节,支付编号,细目名称,单位,sum(申报数量) as 申报数量,sum(申报数量 * 单价) as 申报金额 fro m {中间计量表} " & filter & " group by 项目名称,施工合同段,章节,支付编号,细目名称,单位")

Book.Build()

Book.Save(fl)

Dim Proc As New Process

Proc.File = fl

Proc.Start()

 

Dim Book As New XLS.Book(ProjectPath & "Attachments\分项工程中期支付汇总表.xlsx")

Dim fl As String = ProjectPath & "Reports\分项工程中期支付汇总表.xlsx"

Dim filter As String = DataTables("工程量清单").loadfilter

filter = IIF(filter > ""," where " & filter,"")

book.AddDataTable("分项工程中期支付汇总表","xlgl","selec t 项目名称,施工合同段,章节,支付编号,细目名称,单位,sum(合同数量) as 合同数量,sum(合同数量 * 单价) as 合同金额 fro m {工程量清单} " & filter & " group by 项目名称,施工合同段,章节,支付编号,细目名称,单位")

Book.Build()

Book.Save(fl)

Dim Proc As New Process

Proc.File = fl

Proc.Start()


报表模板:


此主题相关图片如下:66666.png
按此在新窗口浏览图片


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/12 11:49:00 [只看该作者]

1、你要把两个表的数据合并在一起再导出,还是说一个表导出一个sheet,然后得到两个sheet?

 

2、合并两个表,用union all即可,如

 

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

 


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/12 16:01:00 [只看该作者]

"中间计量表"和”工程量清单表“都有项目名称,施工合同段,章节,支付编号列,老师,以下代码想从工程量清单提取数据生成模板报表中的{合同数量}和{合同金额}列,怎么处理?

Dim Book As New XLS.Book(ProjectPath & "Attachments\分项工程中期支付汇总表.xlsx")

Dim fl As String = ProjectPath & "Reports\分项工程中期支付汇总表.xlsx"

Dim filter As String = DataTables("中间计量表").loadfilter

filter = IIF(filter > ""," where " & filter,"")

book.AddDataTable("分项工程中期支付汇总表","xlgl","selec t 项目名称,施工合同段,章节,支付编号,细目名称,单位,sum(申报数量) as 申报数量,sum(申报数量 * 单价) as 申报金额 fro m {中间计量表}, selec t 数量 as 合同数量,数量 * 单价 as 合同金额 fro m {工程量清单}  INNER JOIN {中间计量表}  ON {工程量清单}.项目名称 = {中间计量表}.项目名称 and {工程量清单}.施工合同段 = {中间计量表}.施工合同段 and {工程量清单}.章节 = {中间计量表}.章节 and {工程量清单}.支付编号= {中间计量表}.支付编号 " & filter & " group by 项目名称,施工合同段,章节,支付编号,细目名称,单位")

Book.Build()

Book.Save(fl)

Dim Proc As New Process

Proc.File = fl

Proc.Start()



此主题相关图片如下:7777.png
按此在新窗口浏览图片


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/12 16:55:00 [只看该作者]

没看懂你的问题。把两个表用union all合并起来,然后再处理啊

 

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

 

五、UNION 运算符

UNION运算符用于组合两个查询的结果。
例如有一个客户表,一个供应商表,我需要得到所有在中国的客户和供应商的名称和地址。

默认情况下,UNION会自动排除重复的行,然后你可以用ALL关键词来确保返回所有的行,例如:

SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = '中国' UNION ALL SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = '中国'


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/12 17:38:00 [只看该作者]

就是报表中的【合同数量】、【合同金额】数据来自”工程量清单“表,【申报数量】和【申报金额】数据来自”中间计量表”,不知道该怎么合并

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/12 18:23:00 [只看该作者]

这样,比如

 

SELECT 公司名称, 地址, 合同数量, 合同金额, 0.0 as 申报数量, 0.0 as 申报金额 FROM {客户} UNION ALL SELECT 公司名称, 地址, 0, 0, 申报数量, 申报金额 FROM {供应商}


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/13 9:58:00 [只看该作者]

合同金额=合同数量 * 单价,  申报金额=申报数量 * 单价。老师,以下代码有什么不对

SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 合同数量, 合同数量 * 单价, 0.0 as 申报数量, 0.0 as 申报数量 * 单价 FRO M {工程量清单} UNION ALL SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 0, 0, 申报数量, 申报数量 * 单价  FRO M {中间计量表}


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 10:37:00 [只看该作者]

SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 合同数量, 合同数量 * 单价 as 合同金额, 0.0 as 申报数量, 0.0 as 申报金额 FRO M {工程量清单} UNION ALL SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 0, 0, 申报数量, 申报数量 * 单价  FRO M {中间计量表}

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/13 17:00:00 [只看该作者]

老师,下面的代码生的报表是把每次计量的支付编号都分开生成,如图,我想相同的支付编号只生成一行,各类数量和金额则汇总生成到对应支付编号下

Dim Book As New XLS.Book(ProjectPath & "Attachments\分项工程中期支付汇总表.xlsx")
Dim fl As String = ProjectPath & "Reports\分项工程中期支付汇总表.xlsx"
Dim filter As String = DataTables("中间计量表").loadfilter
filter = IIF(filter > ""," where " & filter,"")
book.AddDataTable("分项工程中期支付汇总表","xlgl"," SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 数量, 数量 * 单价 as 合同金额, 0.0 as 申报数量, 0.0 as 申报金额 FRO M {工程量清单} UNION ALL SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 0, 0, 申报数量, 申报数量 * 单价  FRO M {中间计量表}")
Book.Build()
Book.Save(fl)
Dim Proc As New Process
Proc.File = fl
Proc.Start()


图片点击可在新窗口打开查看此主题相关图片如下:2222.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 18:00:00 [只看该作者]

再分组统计一次,如

 

select 项目名称,施工合同段,章节,支付编号,细目名称,单位, sum(数量) as 数量, sum(金额合同) as 金额合同,sum(申报数量) as 申报数量, sum(申报金额) as 申报金额 from (SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 数量, 数量 * 单价 as 合同金额, 0.0 as 申报数量, 0.0 as 申报金额 FRO M {工程量清单} UNION ALL SELEC T 项目名称,施工合同段,章节,支付编号,细目名称,单位, 0, 0, 申报数量, 申报数量 * 单价  FRO M {中间计量表}) as a group by 项目名称,施工合同段,章节,支付编号,细目名称,单位


 回到顶部