Foxtable(狐表)用户栏目专家坐堂 → SQLCrossTableBuilder后台交叉统计


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

主题:SQLCrossTableBuilder后台交叉统计

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
SQLCrossTableBuilder后台交叉统计  发帖心情 Post By:2021/12/2 9:50:00 [显示全部帖子]

1、最终想要输出的报表样式
合同号          2019年4月      2019年10月       2020年4月      2020年10月     2021年4月     2021年10月
                 指标1  指标2       指标1  指标2      指标1  指标2    指标1  指标2    指标1  指标2   指标1  指标2
A001          100     102         200    202         201   200      200     100      203    100     20      30
……
其中:4月份或10月份,对应的同一个指标的筛选条件基本类似,
例如:2021年4月,对应的筛选条件filter如下:
Dim dt1 As New Date(2021, 4, 1)
Dim dt2 As New Date(2021, 1, 1)
Dim dt3 As New Date(2021, 6, 30)
Dim dt4 As New Date(2020, 10, 1)
Dim dt5 As New Date(2020, 12, 31)
Dim filter1 As String="(合同开始日期 < '" & dt1 & "'  And 应结转日期1 >= '" & dt2 & "' And 应结转日期1 <= '" & dt3 & "')" 
Dim filter2 As String="(合同开始日期 >= '" & dt4 & "' and 合同开始日期 <= '" & dt5 & "'  And 应结转日期1 >= '" & dt4 & "' And 应结转日期1 <= '" & dt5 & "')" 
Dim s3 As String="短租"
Dim filter3 As String="租赁类别 Like '%" & s3 & "%'"
Dim filter As String="(" & filter1 & " Or " & filter2 & ")" & " And " & filter3
2022年4月对应的筛选条件,将红色的2021年变成2022年,将绿色的2020年变成2021年即可。

2、我的思路:按照4月和10月按照不同的指标分别进行交叉统计,之后再进行结果的拼接。即:先进行4月份,指标1的交叉统计;再进行4月份,指标2的交叉统计……;之后将多个结果进行拼接。
3、问题:
(1)交叉统计的表头,怎么按照2019年4月   2020年4月  2021年4月 ……进行统计啊?
(2)不同的交叉统计结果,如何拼接啊?


[此贴子已经被作者于2021/12/2 9:58:16编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/2 10:04:00 [显示全部帖子]


数据比较多,通过后台如何对符合条件的列加上2019年4月,2020年10月等标记啊?

Dim b As New SQLCrossTableBuilder("统计表1","订单")

……


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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/2 11:06:00 [显示全部帖子]

有两个日期类型的字段:日期1   和 日期2 
如下的条件怎么改啊?

update 订单 set 年月=convert(nvarchar(4),日期1,120) + '年4月’ where month(日期1) =1 or month(日期1) =2 or month(日期1) =3 or month(日期1) =4 
将上边的条件中增加一个过滤条件filter2:   (1)日期1和日期2对应的年份相同convert(nvarchar(4),日期1,120) 等于 convert(nvarchar(4),日期2,120)   并且  (2)“日期1”对应的月份=4
如何将filter2对应的  ,加到 where 后面啊?即:让紫色阴影的条件1和  filter2的反  进行联合查询。谢了

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/2 12:14:00 [显示全部帖子]

日期变量 用convert 和 year什么区别啊?
(1)update 订单 set 年月=convert(nvarchar(4),日期1,120) + '年4月’ …… 能改成:update 订单 set 年月=year(日期1)  + '年4月’ ……
(2)如何用convert函数  取出来月份 09月的转换成9月)?
[此贴子已经被作者于2021/12/2 13:05:44编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/2 14:46:00 [显示全部帖子]

1、相关表在一个数据库cs1中。 
日期1 在 订单明细表 中,日期2 在订单表中,通过  订单编号 形成一对多的关系。
update 订单明细表 set 年月=convert(nvarchar(4),日期1,120) + '年4月’ where (month(日期1) =1 or month(日期1) =2 or month(日期1) =3 or month(日期1) =4) and year(日期1) = year(日期2)
阴影部分代码怎么改啊?
2、如果两个表没在同一个数据库中,订单明细在cs1数据库中,而订单表在cs2数据库中,上面代码怎么改啊?
谢了






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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/3 11:03:00 [显示全部帖子]

交叉统计时,如何结果保留小数点后两位四舍五入啊?  round2函数 能套进去吗   b.Totals.AddExp("金额","数量 * 单价") '
[此贴子已经被作者于2021/12/3 11:04:09编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/3 13:34:00 [显示全部帖子]

1、拼两个交叉统计,如何让两个表的,竖向的分组列 相同的放到一起啊?目前默认 第2个统计表的结果放到了第一个统计表的右边。

2、第1和第2个统计表的竖向分组列的表头均显示为:   2021年4月     2021年10月……,并没有把求和的列名:“应缴税额” (第一个统计表)或“税额”(第2个统计表) 显示出来。
即如何将最终的表头结果显示为:
     2021年4月           2021年10月      …
  应缴税额  税额        应缴税额  税额

     
Dim dtx As DataTable
Dim b As New SQLCrossTableBuilder("统计表2","租赁项目结转明细表")
b.C
Dim dt1 As fxDataSource
b.AddTable("租赁项目结转明细表","合同编号","租赁合同结转情况表","合同编号") '添加统计表
b.HGroups.AddDef("{租赁合同结转情况表}.合同编号") '添加客户列用于水平分组
'b.HGroups.AddDef("客户名称") '添加客户列用于水平分组
b.VGroups.AddDef("年月") '添加产品列用于垂直分组,并设置了Pattern参数
b.Totals.AddExp("应缴税额","应结转租金金额/ 1.05*0.12")
dt1 = b.BuildDataSource()


Dim b2 As New SQLCrossTableBuilder("统计表3","房产税实缴明细表")
b2.C
'b2.AddTable("租赁合同fa piao明细表","合同编号","租赁合同结转情况表","合同编号")
Dim dt2 As fxDataSource
b2.HGroups.AddDef("合同编号")  '根据产品ID分组
b2.VGroups.AddDef("应缴年月") '添加产品列用于垂直分组,并设置了Pattern参数
b2.Totals.Adddef("税额")

dt2 = b2.BuildDataSource()
dt1.Combine("合同编号",dt2,"合同编号")
dt1.Show("统计表2") '显示统计结果,必须有这一句
[此贴子已经被作者于2021/12/3 13:35:55编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/3 14:11:00 [显示全部帖子]

1、如果挪动列的话,表头的列的数量不固定,不知道要挪的数量啊
两个统计结果的,第一层表头的规律都是 2019年4月     2019年10月     2020年4月    2020年10月  ……(中间可能有缺少的年份),能否有其他方法将第一层表头相同的挪到一起啊?

2、涉及3张表,表A,表B和表C;表A 与  表B和C 都是 一对多的关系。
先统计表B,再 统计表C,之后拼结果;B和C不能拼成一个表吧?
[此贴子已经被作者于2021/12/3 14:40:09编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/3 15:47:00 [显示全部帖子]

统计表的列名是:
2010年4月     2012年10月    2014年4月     2014年10月   ……   2012年10月    2014年10月
   指标             指标                  指标            指标           ……       金额            金额
1、循环列名,输出结果是:指标_1,指标_2,指标_3,…… 而不是2010年4月_指标2012年10月_指标……
For i As Integer=0 To Tables("统计表2").cols.count-1  Step 1
   output.show(Tables("统计表2").cols(i).name)
Next
2、用什么思路循环挪动后边表的列啊?
[此贴子已经被作者于2021/12/3 15:47:32编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/3 18:08:00 [显示全部帖子]

感谢,明白了
[此贴子已经被作者于2021/12/3 18:08:40编辑过]

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