我需要一些帮助来使用SQL查询在MS Access中执行以下操作。
我想要执行的操作在以下示例中说明:
初始表
表A.
名称H1 H2 ……
对于第1步,请尝试...
SELECT A.NameA AS [NAME TABLE A], B.NameB AS [NAME TABLE B], ABS( A.H1 - B.H1 ) AS H1, ABS( A.H2 - B.H2 ) AS H2, ABS( A.H3 - B.H3 ) AS H3 FROM A, B;
对于第2步,请尝试...
SELECT A.NameA AS [NAME TABLE A], B.NameB AS [NAME TABLE B], ABS( A.H1 - B.H1 ) AS H1, ABS( A.H2 - B.H2 ) AS H2, ABS( A.H3 - B.H3 ) AS H3, H1 + H2 + H3 AS [Total] FROM A, B;
对于第3步,请尝试...
SELECT A.NameA AS [NAME TABLE A], MIN( ABS( A.H1 - B.H1 ) ) AS H1, MIN( ABS( A.H2 - B.H2 ) ) AS H2, MIN( ABS( A.H3 - B.H3 ) ) AS H3 FROM A, B GROUP BY A.NameA;
根据我对AVG的评论,这种情况使用两个表的笛卡尔积,即第一个表中的每个记录都连接到第二个表中的每个记录。这可以通过执行a来实现 CROSS JOIN 正如我所做的那样 FROM A, B 在我的每个陈述中。这个连接为我们提供了以下数据集......
CROSS JOIN
FROM A, B
NameA | A.H1 | A.H2 | A.H3 | NameB | B.H1 | B.H2 | B.H3 ------|------|------|------|-------|------|------|----- A | 5 | 10 | 5 | 1 | 1 | 1 | 1 A | 5 | 10 | 5 | 2 | 2 | 2 | 2 A | 5 | 10 | 5 | 1 | 1 | 1 | 1 A | 5 | 10 | 5 | 2 | 2 | 2 | 2 A | 5 | 10 | 5 | 1 | 1 | 1 | 1 A | 5 | 10 | 5 | 2 | 2 | 2 | 2
(请注意,当一个字段连接到另一个表并且该名称在该另一个表中不存在时,您将能够继续仅通过其名称引用它而无需指定表名(尽管您仍然可以如果你选择)。如果新字段与另一个表中的字段共享一个名称,那么 每 字段需要引用 都 表名和字段名。)
此数据集可用于所有三个任务。
对于第一项任务 ABS() 函数可以用于H1值之间的差异等。请注意,如果生成一个字段,例如with ABS( A.H1 - B.H1 ) ,并且不要使用它来命名 AS ,然后新字段将被任意赋予一个名称,这通常是生成字段的表达式( ABS( A.H1 - B.H1 ) 在这种情况下)或其他不实用的东西。因此,如果您打算在等式的其他部分(或其他地方)引用它们,强烈建议您命名所有生成的字段。
ABS()
ABS( A.H1 - B.H1 )
AS
对于第二个任务,一个简单地将计算结果加起来的表达式 H 字段,如 H1 + H2 + H3 , 就足够了。
H
H1 + H2 + H3
对于第三个任务,我们可以使用在第一个任务中生成的数据集 NameB 柱。然后我们可以将值组合在一起 NameA ,并使用聚合函数 MIN() 从每个中选择最小值 H 柱。
NameB
NameA
MIN()
如果您有任何问题或意见,请随时发表评论。
进一步阅读
如何将此SQL子查询包含在绝对数字的值中? (上 ABS() )
如何在访问中使用交叉连接? (使用a CROSS JOIN 在Access)
http://www.w3resource.com/sql/joins/cross-join.php (关于SQL Cross Joins)