Office中国论坛/Access中国论坛

标题: [讨论]对多个表的相同字段相同内容进行统计 [打印本页]

作者: jp777    时间: 2007-2-16 05:30
标题: [讨论]对多个表的相同字段相同内容进行统计
若一个数据库中有A,B两表,两表中都有相同的两个字段(Manufacture,Malfunction),现在我想做一个查询表,统计两表中以Manufacture字段为关键字段,Malfunction中相同的内容的数量。即统计A+B表中 Manufacture 为A Manlfunction为AA的有多少,为BB的有多少?可是我试了半天都无法将两表相同的内容进行合并。谁能帮我啊。谢谢。

例如

表A                                            表B

Manufacture Malfunction           Manfacture  Malfunction

A                   BB                        B                  AA

B                   CC                       C                  BB

C                   AA                       A                   DD

D                   EE                       E                   CC

E                   AA                       C                   BB

D                   BB                       D                   AA

C                    BB                      B                   BB

E                    AA                      A                   CC

B                    CC                      E                   AA

B                    BB                      B                   EE

A                    AA                      A                   AA[attach]23127[/attach]

作者: 一点通    时间: 2007-2-16 06:22
使用联合查询或DSum()进行统计,具体请查看帮助

[此贴子已经被作者于2007-2-15 22:23:05编辑过]


作者: jp777    时间: 2007-2-16 16:29
可是DSum()的条件必须手工输入,无法自动筛选。
作者: 一点通    时间: 2007-2-16 18:27
看错你的内容,应该用DCount()来统计,以下是应用方法

SELECT A.Maunfacture, Count([malfunction])+DCount("malfunction","B","[Manufacture]='" & [Maunfacture] & "'") AS 两表相加数量
FROM A
GROUP BY A.Maunfacture;

作者: Joe5525601    时间: 2007-2-16 21:05
用了四个查询串起来。[attach]23136[/attach]

作者: andymark    时间: 2007-2-17 00:50
SELECT A.Maunfacture, A.malfunction, Count([malfunction])+DCount("malfunction","B","[Manufacture]='" & [Maunfacture] & "' and [malfunction]='" & [malfunction] & "'") AS 两表相加数量
FROM A
GROUP BY A.Maunfacture, A.malfunction
UNION SELECT Manufacture, malfunction, count(malfunction) AS 合计
FROM [SELECT c.Manufacture, c.malfunction
FROM B AS c
WHERE c.malfunction not in (select malfunction from A where Maunfacture=c.Manufacture)]. AS [%$##@_Alias]
GROUP BY Manufacture, malfunction;

[attach]23142[/attach]


[此贴子已经被作者于2007-2-16 16:53:02编辑过]


作者: jp777    时间: 2007-2-26 06:03
谁能解释一下上面的语句阿,为什么我在ACCESS2000下无法运行呢?
作者: andymark    时间: 2007-2-26 06:28
以下是引用jp777在2007-2-25 22:03:00的发言:
谁能解释一下上面的语句阿,为什么我在ACCESS2000下无法运行呢?



       2000可以运行的

1. 求出A表有且B表 的Manufacture和malfunction相对应的项目次数

SELECT A.Maunfacture, A.malfunction, Count([malfunction])+DCount("malfunction","B","[Manufacture]='" & [Maunfacture] & "' and [malfunction]='" & [malfunction] & "'") AS 两表相加数量
FROM A
GROUP BY A.Maunfacture, A.malfunction

2. 求出B表有而A表没有的项目

SELECT Manufacture, malfunction, count(malfunction) AS 合计
FROM [SELECT c.Manufacture, c.malfunction
FROM B AS c
WHERE c.malfunction not in (select malfunction from A where Maunfacture=c.Manufacture)]. AS [%$##@_Alias]
GROUP BY Manufacture, malfunction

3.用UNION 合并上述查询,即可查询A、B相加的数量

     也可以用Joe5525601 的方法分几个查询来实现



作者: jp777    时间: 2007-2-26 20:54
我对上面的例子做了写修改。然后再试,前半部分统计可以进行,但后半段就无法进行下去了。请问这是为什么?谢谢。
1,将表A的名称改为Motor Overhaul,将表B的名称改为Motor Rewinding.
2, 将字段Manufacture改为Manufacturer/制造商,将字段Malfunction改为Malfunction Performance/故障现象。


SELECT [Motor Overhaul].[Manufacturer/制造商], [Motor Overhaul].[Malfunction Performance/故障现象], Count([Motor Overhaul].[Malfunction Performance/故障现象])+DCount("[Malfunction Performance/故障现象]","Motor Rewinding","[Motor Rewinding].[Manufacturer/制造商]='" & [Motor Overhaul].[Manufacturer/制造商] & "' and [motor Rewinding].[Malfunction Performance/故障现象]='" & [Motor Overhaul].[Malfunction Performance/故障现象] & "'") AS 两表相加数量
FROM [Motor Overhaul]
GROUP BY [Motor Overhaul].[Manufacturer/制造商], [Motor Overhaul].[Malfunction Performance/故障现象];

UNION SELECT [motor Rewinding].[Manufacturer/制造商], [motor Rewinding].[Malfunction Performance/故障现象], Count([motor Rewinding].[Malfunction Performance/故障现象]) AS 合计
FROM [SELECT [C].[Manufacturer/制造商],[C].[Malfunction Performance/故障现象]
FROM [Motor Rewinding] AS [C]
WHERE [C].[Malfunction Performance/故障现象] not in ( SELECT [Malfunction Performance/故障现象] from [Motor Overhaul] WHERE  [Motor Overhaul].[Manufacturer/制造商]= [C].[Manufacturer/制造商])]. AS [%$##@_Alias]
GROUP BY [motor Rewinding].[Manufacturer/制造商],[motor Rewinding].[Malfunction Performance/故障现象];[attach]23238[/attach]

作者: sbsfhgl    时间: 2007-3-2 21:55
d
作者: sbsfhgl    时间: 2007-3-2 21:56
3
作者: REORX    时间: 2008-3-1 11:27
学习一下 路过.........




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3