Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

关于建立查询问题

alex0516  发表于:2014-01-28 10:37:59  
复制

表一

表1
VIN 成本
A001 100
A002 100
A003 100

 

表二

表2
VIN 数量
A001 1
A001 -1
A002 1

 

表三

表3
VIN 数量
A001 1
A001 -1
A002 1
A002 -1

 

如何建立查询,使得结果是;

查询1
VIN 成本 数量之总计 数量之总计1
A001 100 0 0
A002 100 1 0
A003 100

现在附件只能做到:�������ش˸���

查询1
VIN 成本 数量之总计 数量之总计1
A001 100 0 0
A002 100 2 0
A003 100

 

 

Top
zhaoyoulong 发表于:2014-01-28 11:06:42
SELECT DISTINCT 表1.VIN, 表1.成本, Nz(DSum("[数量]","表2","VIN='" & [VIN] & "'"),0) AS 表2数量总计, Nz(DSum("[数量]","表3","VIN='" & [VIN] & "'"),0) AS 表3数量总计
FROM 表1;
点击下载此附件


alex0516 发表于:2014-01-28 13:45:56

Nz(DSum("[数量]","表2","VIN='" & [VIN] & "'"),0) AS 表2数量总计, Nz(DSum("[数量]","表3","VIN='" & [VIN] & "'"),0) AS 表3数量总计

谁能告诉我下DSUM公式的逻辑,需要灵活应用,谢谢。



zhaoyoulong 发表于:2014-01-28 13:52:59


简单一点:DSUM 是用于计算汇总的一个聚合函数

用法为: DSUM("[要统计的字段名称]","字段所在的表或查询名称","你的统计条件")



详细一点,如下:

Access 开发人员参考

Application.DSum 方法

使用 DSum 函数可以计算指定记录集( (域:由表、查询或 SQL 表达式定义的记录集。域聚合函数返回有关特定域或记录集的统计信息。))中一组值的总和。

语法

表达式.DSum(Expr, Domain, Criteria)

表达式   一个代表 Application 对象的变量。

参数

名称 必选/可选 数据类型 说明
Expr 必选 String 表达式,用于标识要对其值作总计的字段。可以是指向表或查询中字段的字符串表达式 (字符串表达式:任一求值为一列连续字符的表达式。表达式的元素可以是:返回字符串或字符串 Variant (VarType 8) 的函数;字符串字面值、常量、变量或 Variant。),也可以是以该字段中的数据进行计算的表达式。在 expr 中,可以包含表中字段、窗体控件、常量或函数的名称。如果 expr 包含函数,那么它可以是内置函数或用户定义的函数,但不能是其他域聚合函数或 SQL 聚合函数。
Domain 必选 String 字符串表达式,用于标识组成域的记录集。可以是表名称或不需要参数的查询的查询名称。
Criteria 可选 Variant 可选字符串表达式,用于限制 DSum 函数的执行对象的数据取值范围。例如,criteria 常常等价于 SQL 表达式中除去 WHERE 单词的 WHERE 子句。如果省略 criteriaDSum 函数将对整个域计算 expr。任何包含在 criteria 中的字段必须也必须是 domain 中的字段;否则 DSum 函数将返回 Null

返回值
Variant

说明

例如,可以在查询的计算字段表达式中使用 DSum 函数来计算一段时期某个特定雇员的总销售量。也可以在计算控件中使用 DSum 函数来显示特定产品的连续的销售总和。

如果没有记录满足 criteria 参数或者域中不包含任何记录,DSum 函数将返回 Null

无论是在宏、模块、查询表达式中,还是在计算控件中使用 DSum 函数,都必须仔细构建 criteria 以确保它能正确地计算。

在查询的“条件”行、查询表达式的计算字段中或 DSum 更新查询 (更新查询:一种动作查询(SQL 语句),它根据所指定的条件(查找条件)更改记录集。)的“更新到”行中,均可以使用 DSum 函数指定条件。

  注释
可以在总计查询 (总计查询:这种查询可针对表(一个或多个)中各不同字段显示汇总计算,如平均值或总计值。总计查询不是一个单独种类的查询,而是扩展了选择查询的灵活性。)的计算字段表达式中使用 DSumSum 函数。如果使用 DSum 函数,将在数据分组之前计算总计值。如果使用 Sum 函数,则将先分组再对字段表达式中值进行求和。

如果需要显示窗体或报表记录源以外的字段中一组值的总和,可能需要使用 DSum 函数。例如,假定有一个窗体显示有关某种产品的信息,可以在计算控件中使用 DSum 函数来计算该产品销售额的运行时总和。

如果要保持报表控件中的运行总和,当控件所基于的字段位于报表的记录源中时,可以使用控件的 RunningSum 属性,而使用 DSum 函数则可维护窗体上的运行总和。


示例

下面的示例计算运往英国的订单的“Freight”字段的总计值。域为“Orders”表。criteria 参数将记录集的结果限制为“ShipCountry”等于 UK 的记录。

Visual Basic for Applications
Dim curX As Currency
curX = DSum("[Freight]", "Orders", "[ShipCountry] = 'UK'")

下一个示例通过使用两个不同的条件来计算总计。注意单引号(')和数字符号(#)需要包括在字符串表达式中,使得字符串连接时,将原义字符串包含在单引号中,将日期包含在数字符号中。

Visual Basic for Applications
Dim curX As Currency
curX = DSum("[Freight]", "Orders", _
    "[ShipCountry] = 'UK' AND [ShippedDate] > #1-1-95#")


© 2010 Microsoft Corporation。保留所有权利。





alex0516 发表于:2014-01-28 14:05:41

谢谢大神,以下这段函数什么意思,又是"'又是&,是否能详细解释一下。顺祝新年快乐!

 

","VIN='" & [VIN] & "'"),0

 



zhaoyoulong 发表于:2014-01-28 14:21:21

"VIN='" & [VIN] & "'" 的意思是:当字段VIN的值等于当前表的字段值 相当于 SELECT * FROM 表 WHERE  VIN=理解为变量 这个变量就是 [VIN]

& 是连接符 

由于字段 VIN 是一个字符型的数据类型,所以前面要加 '  后面也要加 '

如果字段 VIN 是数字型(如:整型,自动编号) 只要写成"VIN=" & [VIN]

如果字段 VIN 是日期型 只要写成"VIN=#" & [VIN] &"#"

至于 &和" 号是字符串和变量联接的格式符号




alex0516 发表于:2014-01-28 15:09:37

大侠,又碰到问题了。

 

能否在我原本建立的查询1中修改,我直接把公式更改后报错了。



zhaoyoulong 发表于:2014-01-28 15:13:40

把我给你的附件中的查询1删除

重命名查询2为查询1

或上传附件帮你改一下,现在刚好闲着



alex0516 发表于:2014-01-28 15:25:34

附件就是你帮我改好的那个,你帮我建立了一个查询2,用SQL写的。我原本自己建立的是查询1,用access查询建立的。如何使得查询1也能达到这个效果。

�������ش˸���

 



zhaoyoulong 发表于:2014-01-28 15:29:23
alex0516 发表于:2014-01-28 15:33:36
我原本from后面有那么多子句;FROM (表1 LEFT JOIN 表2 ON 表1.VIN = 表2.VIN) LEFT JOIN 表3 ON 表2.VIN = 表3.VIN替换成FROM 表1; 一样吗?

zhaoyoulong 发表于:2014-01-28 15:34:42
是的

alex0516 发表于:2014-01-28 16:39:15

是否还有其他变通的方法,我在自己的表里就是无法成本,可能里面还有其他公式。



zhaoyoulong 发表于:2014-01-28 16:40:53
什么意思?

zhaoyoulong 发表于:2014-01-28 16:43:33
把所有问题摆出来,不要挤牙膏.这样便于快速解决

alex0516 发表于:2014-01-29 14:49:16

请问DSUM是否只能在SQL中写,本人不太熟系SQL中写语言。只会在查询中设置,所以请问如何将这个DSUM公式转换成SUM公式。Nz(DSum("[数量]","表2","VIN='" & [VIN] & "'"),0) AS 表2数量总计

 

实在不好意思,我在表中用了DSUM公式感觉很慢,而且我的表中信息量太大,不方便上传,麻烦了。



蒋元根 发表于:2014-01-29 17:11:48
alex0516 发表于:2014-01-29 23:38:19
 Nz(DSum("[数量]","表2","VIN='" & [VIN] & "'"),0) AS 表2数量总计

以上这个公式在查询表中有几万行数据时是否会变得很慢,是否有替代的办法,谢谢。



总记录:17篇  页次:1/1 9 1 :