Foxtable(狐表)用户栏目专家坐堂 → [求助]关于统计和合并的求助


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

主题:[求助]关于统计和合并的求助

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


加好友 发短信
等级:管理员 帖子:47509 积分:251469 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/13 9:57:00 [显示全部帖子]

惭愧,被被绕晕了,没看明白

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


加好友 发短信
等级:管理员 帖子:47509 积分:251469 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/13 11:04:00 [显示全部帖子]

关联一
父表: 客户(客户ID) 
子表: 合同(客户ID)

关联二
父表:合同(合同ID)
子表:订单("合同ID")

关联三:
父表:产品(产品ID)
子表:订单(产品ID)

设置完成后:
1、客户表作为主表时,选择某客户,会自动列出该客户的全部合同,选择某合同,会自动列出该合同的全部订单
2、产品标作为主表,选择某产品,会自动列出该产品的全部订单,选择某订单,会自动列出对应的合同
3、订单表作为主表,选择某订单,会自动列出对应的产品和合同,以及该合同对应的客户。


foxtable是双向定位,便利向超过目前任何通用数据管理软件,关键是你自己思路要清楚。

[此贴子已经被作者于2009-10-13 11:06:16编辑过]

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


加好友 发短信
等级:管理员 帖子:47509 积分:251469 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/13 11:22:00 [显示全部帖子]

5楼统计有意义吗?这不是统计来的,因为同一个合同的相同的产品的订单是一个的。
其实你要的组合表,将不同表种相关的字段合成一个表,这个只能用查询表事先,建议看看帮助中的SQL部分,其中Select讲到了如何组合不同表的数据。

另外统计不同表的数据,还可以看看SQLGroupTableBuilder / SQLCrossTableBuilder

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


加好友 发短信
等级:管理员 帖子:47509 积分:251469 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/13 11:58:00 [显示全部帖子]

reachtone对这个熟悉,你可以问问他.

下面是关于组合多个表的说明



、多表查询

有的时候,你可能希望查询表的列来自于多个表,可以通过JOIN语句来实现这样的功能。JOIN语句可以让你从已经定义了相互关系的工作表中检索记录,而不用管记录和工作表之间的关系是一对一、一对多还是多对多。

语法:

SELECT 字段列表 FROM {表1} INNER JOIN {表2} ON {表1}.列名 = {表2} .列名

因为字段来自于两个表,所以如果对于两个表都有的字段,必须明确表的名称。
ON关键词指定两个表通过哪一列进行连接,指定的字段必须具备相同的数据类型和长度。

示例:

SELECT {订单明细}.*, 产品名称 FROM {订单明细} INNER JOIN {产品} ON {订单明细}.产品ID = {产品}.产品ID ORDER BY 订单ID

上述语句生成的查询表,包括订单明细的所有列,以及该订单明细对应的产品名称(来源于产品表)

INNER JOIN要求两个表必须都有对应的记录,才会在查询表中生成记录。你还可以用LEFT JOIN 或者 RIGHT JOIN,前者只要求左边的表有对应的记录即可,后者只要求右边的表有对应的记录即可。

数据不仅可以来自于两个表,还可以来自于更多的表,例如下面的语句:

SELECT 订购日期, {订单明细}.*, 产品名称 FROM ({订单明细} INNER JOIN {产品} ON {订单明细}.产品ID = {产品}.产品ID) INNER JOIN {订单} ON {订单明细}.订单ID = {订单}.订单ID ORDER BY 订购日期

上面的查询表的列来自于三个表,其中订购日期来自于订单表,产品名称来自于产品表,其余来自订单明细表。

下面的查询,列来自于四个表:

SELECT 订购日期,公司名称,产品名称, 数量, {订单明细}.单价, 折扣, (数量 * {订单明细}.单价 * (1-折扣)) AS 金额 FROM (({订单明细} INNER JOIN {产品} ON {订单明细}.产品ID = {产品}.产品ID) INNER JOIN {订单} ON {订单明细}.订单ID = {订单}.订单ID) INNER JOIN {客户} ON {订单}.客户ID = {客户}.客户ID

在上面的查询中,因为产品表和订单明细表都有单价列,所以字段列表中对于单价列的引用,要明确引用的是哪一个表的单价列,例如:订单明细.单价

此外,在有多个JOIN语句的情况下,靠前的JOIN语句要用圆括号括起来,如前面的例子所示。


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


加好友 发短信
等级:管理员 帖子:47509 积分:251469 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/13 14:42:00 [显示全部帖子]

你的合并代码是?

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


加好友 发短信
等级:管理员 帖子:47509 积分:251469 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/13 15:33:00 [显示全部帖子]

我打开你一楼的文件,将按钮公式改为下面的,测试通过,可以合并。


Dim b As New SQLCrossTableBuilder("统计表1","合同明细表")
b.C
b.AddTable("合同明细表","产品ID","SPLIST","产品ID") '添加统计表
b.AddTable("合同明细表","客户ID","客户资料","客户ID") '添加统计表
b.AddTable("合同明细表","合同ID","销售合同表","合同ID") '添加统计表
b.AddCols("SPLIST","品名") '指定产品名称列来自产品表
b.AddCols("客户资料","客户名称") '指定客户名称列来自客户表
b.AddCols("销售合同表","合同号") '指定合同号来自销售合同表
b.AddCols("合同明细表","规格")   '指定规格来自合同明细表
'b.HGroups.AddDef("日期",DateGroupEnum.Year,"年") '添加日期列用于垂直分组,按年分组
b.HGroups.AddDef("客户名称")
b.HGroups.AddDef("合同号")
b.HGroups.AddDef("规格")
b.VGroups.AddDef("品名","合同基本明细_{0}")
b.Totals.AddDef("数量")
b.Totals.AddDef("实际交货量") '添加数量列用于统计
b.Totals.AddDef("欠量") '添加数量列用于统计
b.Exprs.Adddef("应收货款","[数量]*[单价]") '添加数量列用于统计
Tables("窗口1_Table1").DataSource = b.BuildDataSource
With Tables("窗口1_Table1")
    .Redraw = False
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Clear()
    .MergeCols.Add("客户名称")
    .MergeCols.Add("合同号")
    .MergeCols.Add("规格")
    .MergeSort = "客户名称,合同号,规格"
    .AllowMerge = True
    .Redraw = True
End With

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


加好友 发短信
等级:管理员 帖子:47509 积分:251469 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/13 16:05:00 [显示全部帖子]


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

 回到顶部