Foxtable(狐表)用户栏目专家坐堂 → 如何实现excel透视表的功能,即纵向转化为横向显示


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

主题:如何实现excel透视表的功能,即纵向转化为横向显示

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


加好友 发短信
等级:八尾狐 帖子:1934 积分:17667 威望:0 精华:0 注册:2014/7/29 19:09:00
如何实现excel透视表的功能,即纵向转化为横向显示  发帖心情 Post By:2019/2/18 23:05:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:tim截图20190218230022-1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:tim截图20190218230022-2.jpg
图片点击可在新窗口打开查看

如上两图,如何简单实现将上图的纵向显示变成下面的横向显示?用sql的PIVOT运算符可以实现吗?

谢谢!


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111419 积分:567171 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/18 23:19:00 [只看该作者]

不就是交叉统计吗

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


加好友 发短信
等级:八尾狐 帖子:1934 积分:17667 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/2/19 11:12:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:tim截图20190218230022-3.jpg
图片点击可在新窗口打开查看

Dim b As New SQLCrossTableBuilder("统计表1","计划订单")
        b.ConnectionName = Mydata
        b.HGroups.AddDef("品名") '添加客户列用于水平分组
        b.HGroups.AddDef("子件") '添加客户列用于水平分组
        
        b.VGroups.AddDef("到期日",DateGroupEnum.Month,"{}月")
        b.VGroups.AddDef("到期日",DateGroupEnum.Day,"{}日") '添加产品列用于垂直分组,并设置了Pattern参数
        b.Totals.AddDef("毛需求量") '添加数量列用于统计
        '  b.Build '生成统计表
        tbl.DataSource = b.BuildDataSource

如果上面月份2那里要显示为2019年2月,红色那里要怎么改?还有3月那里为何显示错误,
谢谢!



 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

用SQLCrossTableBuilder才有"{}月"这种用法

可以向VGroups增加表达式分组列,语法为:

VGroups.AddExp(Name, Expression)
VGroups.AddExp(Name, Expression,Pattern)

参数说明:

Name:      字符型,指定列名。
Expression:字符型,指定表达式。
Pattern:    指定生成标题的模式,用字符"{0}"表示分组值;假定分组值是10,模式是"第{0}周",生成的分组标题将是"第10周"


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


加好友 发短信
等级:八尾狐 帖子:1934 积分:17667 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/2/19 13:56:00 [只看该作者]

可以了,谢谢!另外想问下
表达式列与普通统计列好象不能混用,如
b.VGroups.AddExp("月","Month(到期日)","{0}月")
b.VGroups.AddDef("到期日",DateGroupEnum.Day,"{0}日") 
这样混用标题上月就会显示在日的下面,而且不能合并,
还有想将月那里显示为2019年2月不可以,会出错,只能显示为2月,如果想显示年,必须要再增加年的统计列
b.VGroups.AddExp("月","Year(到期日) & "-年" & Month(到期日)","{0}月")  
这样写会出错



 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

b.VGroups.AddExp("月","Year(到期日) + '年' + Month(到期日)","{0}月")  

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


加好友 发短信
等级:八尾狐 帖子:1934 积分:17667 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/2/19 15:28:00 [只看该作者]

那如果是SQLCrossTableBuilder
Dim b As New SQLCrossTableBuilder("统计表1","计划订单")
b.VGroups.AddDef("到期日",DateGroupEnum.Year & "年" & DateGroupEnum.Month,"{0}月")
红色的那应该如何写?

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

没有这种用法,只能用表达式模式

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


加好友 发短信
等级:八尾狐 帖子:1934 积分:17667 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/2/22 11:37:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:tim截图20190222113647.jpg
图片点击可在新窗口打开查看

对于要从多个表中查询合并数据再来交叉统计,上面的sql语句要拼写很多行,还有如果变动每次都要更新,就想直接在sql中通过执行储存过程来实现,然后绑定表就行,

这样修改可以直接后台修改就生效


比如

"SELECT 产品编码,交货日期,SUM(数量) AS 需求数量 FROM 订单明细 GROUP BY 产品编码,交货日期" 这个查询得到的数据用sql查询要转换为按产品编码水平分组,交货日期为垂直分组


这个sql语句应该怎么写?


谢谢!


 回到顶部