以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何实现excel透视表的功能,即纵向转化为横向显示  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=131152)

--  作者:happyft
--  发布时间:2019/2/18 23:05:00
--  如何实现excel透视表的功能,即纵向转化为横向显示

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

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

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

谢谢!


--  作者:有点蓝
--  发布时间:2019/2/18 23:19:00
--  
不就是交叉统计吗
--  作者:HappyFt
--  发布时间: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月那里为何显示错误,
谢谢!



--  作者:有点蓝
--  发布时间: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
--  发布时间: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}月")  
这样写会出错



--  作者:有点蓝
--  发布时间:2019/2/19 14:28:00
--  
b.VGroups.AddExp("月","Year(到期日) + \'年\' + Month(到期日)","{0}月")  
--  作者:HappyFt
--  发布时间:2019/2/19 15:28:00
--  
那如果是SQLCrossTableBuilder
Dim b As New SQLCrossTableBuilder("统计表1","计划订单")
b.VGroups.AddDef("到期日",DateGroupEnum.Year & "年" & DateGroupEnum.Month,"{0}月")
红色的那应该如何写?

--  作者:有点蓝
--  发布时间:2019/2/19 15:48:00
--  
没有这种用法,只能用表达式模式
--  作者:HappyFt
--  发布时间:2019/2/22 11:37:00
--  


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

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

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


比如

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


这个sql语句应该怎么写?


谢谢!