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


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

主题: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编辑过]

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


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

增加一个辅助列,比如名称为“年月”,到datacolchanged事件,把日期符合4月份的,“年月”列记录为“2019年4月”,“2020年4月”这种数据。然后根据年月列进行统计

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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","订单")

……


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


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

试试

update 订单 set 年月=convert(nvarchar(4),日期,120) + '年4月’ where month(日期) =1 or month(日期) =2 or month(日期) =3 or month(日期) =4

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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的反  进行联合查询。谢了

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


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

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)

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


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


1、sql的语法请自行网上搜索,大把教程的
2、取月份使用month
[此贴子已经被作者于2021/12/2 13:28:59编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | 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数据库中,上面代码怎么改啊?
谢了






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


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

1、https://www.baidu.com/baidu?ie=UTF-8&word=SqlServer%20%E5%A4%9A%E8%A1%A8%E5%85%B3%E8%81%94%E6%9B%B4%E6%96%B0

2、不同数据库没有办法使用sql关联,只能加载数据后遍历处理

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