SQL MS ACCESS:表与过滤结果之间的选择性操作
SQL MS ACCESS: selective operations between tables and filtering results
我需要一些帮助才能使用 SQL 查询在 MS Access 中执行以下操作。
我想执行的操作如下例所示:
初始tables
TABLE一个
Name H1 H2 H3
A 5 10 5
B 1 2 3
C 7 3 1
TABLE乙:
Name H1 H2 H3
1 1 1 1
2 2 2 2
1) 第一步:结果
NAME TABLE A NAME TABLE B H1 H2 H3
A 1 4 9 4
A 2 3 8 3
B 1 0 1 2
B 2 1 0 1
C 1 6 2 0
C 2 5 1 1
因此,这个新的 table 的第一行计算为 ABSOLUTEVALUE( TABLE A (row A)-TABLE B(row1)),第二行这个 table 将是 ABSOLUTEVALUE( TABLE A (row A)-TABLE B(row2)) 等等。
2) 第二步:结果
NAME TABLE A NAME TABLE B H1 H2 H3 Total
A 1 4 9 4 17
A 2 3 8 3 14
B 1 0 1 2 3
B 2 1 0 1 2
C 1 6 2 0 8
C 2 5 1 1 7
所以在这一步中,我需要添加一个字段,该字段计算为每行的值 H1、H2 和 H3 的总和
3) 最后一步:结果
Name H1 H2 H3
A 3 8 3
B 1 0 1
C 5 1 1
在最后一步中,我们 select 前一个 table 中字段 Total 具有最小值的 A、B 和 C 行。
谢谢!
对于第 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 的评论,这种情况使用了两个 table 的笛卡尔积,这是第一个 table 中的每条记录与第二个中的每条记录相连接的地方table。这可以通过执行 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
(请注意,当一个字段连接到另一个 table 并且它的名称在另一个 table 中不存在时,您将能够仅通过其名称继续引用它无需指定 table 名称(但如果您愿意,您仍然可以这样做)。如果新字段确实与另一个 table 中的字段共享一个名称,则 each 字段需要通过 table 名称和字段名称来引用。)
此数据集可用于所有三个任务。
对于第一个任务,ABS()
函数可用于 H1 值之间的差异等。请注意,如果您生成一个字段,例如使用 ABS( A.H1 - B.H1 )
,并且不要使用 AS
为其命名,然后新字段将被任意指定一个名称,该名称通常是生成该字段的表达式(在本例中为 ABS( A.H1 - B.H1 )
)或其他难以使用的名称。因此,如果您打算在等式的其他部分(或其他地方)引用它们,强烈建议您命名所有生成的字段。
对于第二个任务,只需将计算的 H
字段相加的表达式(例如 H1 + H2 + H3
)就足够了。
对于第三个任务,我们可以使用第一个任务中生成的数据集,但没有 NameB
列。然后我们可以按 NameA
的值将行分组在一起,并使用聚合函数 MIN()
从每个 H
列中选择最小值。
如果您有任何问题或意见,请随时post发表相应的评论。
进一步阅读
How to include this SQL subquery for absolute number's value?(在 ABS()
上)
How to use cross join in access?(在 Access 中使用 CROSS JOIN
)
http://www.w3resource.com/sql/joins/cross-join.php(关于 SQL 一般交叉连接)
我需要一些帮助才能使用 SQL 查询在 MS Access 中执行以下操作。
我想执行的操作如下例所示:
初始tables
TABLE一个
Name H1 H2 H3
A 5 10 5
B 1 2 3
C 7 3 1
TABLE乙:
Name H1 H2 H3
1 1 1 1
2 2 2 2
1) 第一步:结果
NAME TABLE A NAME TABLE B H1 H2 H3
A 1 4 9 4
A 2 3 8 3
B 1 0 1 2
B 2 1 0 1
C 1 6 2 0
C 2 5 1 1
因此,这个新的 table 的第一行计算为 ABSOLUTEVALUE( TABLE A (row A)-TABLE B(row1)),第二行这个 table 将是 ABSOLUTEVALUE( TABLE A (row A)-TABLE B(row2)) 等等。
2) 第二步:结果
NAME TABLE A NAME TABLE B H1 H2 H3 Total
A 1 4 9 4 17
A 2 3 8 3 14
B 1 0 1 2 3
B 2 1 0 1 2
C 1 6 2 0 8
C 2 5 1 1 7
所以在这一步中,我需要添加一个字段,该字段计算为每行的值 H1、H2 和 H3 的总和
3) 最后一步:结果
Name H1 H2 H3
A 3 8 3
B 1 0 1
C 5 1 1
在最后一步中,我们 select 前一个 table 中字段 Total 具有最小值的 A、B 和 C 行。
谢谢!
对于第 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 的评论,这种情况使用了两个 table 的笛卡尔积,这是第一个 table 中的每条记录与第二个中的每条记录相连接的地方table。这可以通过执行 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
(请注意,当一个字段连接到另一个 table 并且它的名称在另一个 table 中不存在时,您将能够仅通过其名称继续引用它无需指定 table 名称(但如果您愿意,您仍然可以这样做)。如果新字段确实与另一个 table 中的字段共享一个名称,则 each 字段需要通过 table 名称和字段名称来引用。)
此数据集可用于所有三个任务。
对于第一个任务,ABS()
函数可用于 H1 值之间的差异等。请注意,如果您生成一个字段,例如使用 ABS( A.H1 - B.H1 )
,并且不要使用 AS
为其命名,然后新字段将被任意指定一个名称,该名称通常是生成该字段的表达式(在本例中为 ABS( A.H1 - B.H1 )
)或其他难以使用的名称。因此,如果您打算在等式的其他部分(或其他地方)引用它们,强烈建议您命名所有生成的字段。
对于第二个任务,只需将计算的 H
字段相加的表达式(例如 H1 + H2 + H3
)就足够了。
对于第三个任务,我们可以使用第一个任务中生成的数据集,但没有 NameB
列。然后我们可以按 NameA
的值将行分组在一起,并使用聚合函数 MIN()
从每个 H
列中选择最小值。
如果您有任何问题或意见,请随时post发表相应的评论。
进一步阅读
How to include this SQL subquery for absolute number's value?(在 ABS()
上)
How to use cross join in access?(在 Access 中使用 CROSS JOIN
)
http://www.w3resource.com/sql/joins/cross-join.php(关于 SQL 一般交叉连接)