(MS ACCESS) SQL 分组加入语句
(MS ACCESS) SQL to group joined statement
早上好!
我有一个 MS Access 拆分数据库(尚未使用 ms sql 服务器),它通过临时查询(想象中称为 "temp"! )
SELECT table_CORE.[core-ID],
table_CORE.[PO],
table_CORE.[Part],
table_CORE.[Part Rev],
table_CORE.[Supplier Doc #],
table_CORE.[Sup Doc Rev],
table_DATES.[date-ID],
table_DATES.[iteration],
table_REJECTIONS.[rejection-ID],
table_REJECTIONS.[iteration],
table_REJECTIONS.[reason],
table_REJECTIONS.[details],
table_REJECTIONS.[timestamp]
FROM
(
(
table_CORE INNER JOIN [TEMP]
ON table_CORE.[core-ID] = TEMP.[date-ID]
)
INNER JOIN [table_DATES]
ON TEMP.[date-ID] = table_DATES.[date-ID]
AND TEMP.[iteration]=table_DATES.[iteration]
)
INNER JOIN table_REJECTIONS
ON TEMP.[date-ID] = table_REJECTIONS.[rejection-ID]
AND TEMP.[iteration]=table_REJECTIONS.[iteration]
WHERE table_CORE.[core-ID] Like '*'
所以最终,这会显示文档拒绝列表 - 这很好,除了每个文档适用于多个部分。
您可以将 PO、Part 和 Part Rev 捆绑在一起,将这些拒绝合并到一个文档中 - 问题是我通常会使用 GROUP BY 子句来执行此操作...
...除了 "details" 字段是备忘录数据类型,当您尝试 GROUP BY 子句时,access 会将其截断为 256 个字符。
有什么解决办法吗?在将其加入拒绝 table 之前,我已经尝试过该组条款,但我最终遇到了同样的问题(因为有多个拒绝将相同的 PO、零件号和修订捆绑在一起)——而且我我正在研究其他方法,但我就是无法理解它所需的 SQL!
非常感谢!
如果您需要更多详细信息,请告诉我!
---其他细节---
示例:
ID PO Part Rev reason details
1 111 A1 A error some_details1
2 111 A1 A error some_details1
3 111 A1 A error some_details1
4 222 A1 A error some_details1
6 222 A1 A error some_details1
7 333 B1 A error some_details1
8 333 B1 A error some_details1
9 444 B1 A error some_details1
10 555 C1 A error some_details1
需要改为:
PO Part Rev reason details
111 A1 A error some_details1
222 A1 A error some_details1
333 B1 A error some_details1
444 B1 A error some_details1
555 C1 A error some_details1
有关连接功能如何工作的注意事项:
当前项目存储在 CORE 中,并通过 core-ID>>date-ID 与具有一对多关系的日期相关联,然后使用迭代来获取零件历史记录中的最新事件。
然后使用 core-ID>>rejeciton-ID AND date-iteration>>rejectioniteration[= 将最近的事件加入拒绝列表45=] 到 return 个当前活跃的拒绝。
原来我可以作弊让 MS 帮我写 SQL!
在查询编辑器中遵循 AllenBrowne 的建议(而不是直接使用 SQL),并使用 FIRST() 而不是 GROUP BY() 聚合 table_REJECTIONS.details修好了!
不过,编写代码真是令人讨厌 - 查询的原始 SQL 如下所示。
SELECT table_CORE.PO,
table_CORE.Part,
table_CORE.[Part Rev],
table_CORE.[Supplier Doc #],
table_CORE.[Sup Doc Rev],
table_REJECTIONS.reason,
First(table_REJECTIONS.details) AS details
FROM
(
(
table_CORE INNER JOIN TEMP
ON table_CORE.[core-ID] = TEMP.[date-ID]
)
INNER JOIN table_DATES
ON
(
TEMP.[iteration] = table_DATES.[iteration]
)
AND
(
TEMP.[date-ID] = table_DATES.[date-ID]
)
)
INNER JOIN table_REJECTIONS
ON
(
TEMP.[iteration] = table_REJECTIONS.[iteration]
)
AND
(
TEMP.[date-ID] = table_REJECTIONS.[rejection-ID]
)
WHERE table_CORE.[core-ID] Like '*'
GROUP BY table_CORE.PO,
table_CORE.Part,
table_CORE.[Part Rev],
table_CORE.[Supplier Doc #],
table_CORE.[Sup Doc Rev],
table_REJECTIONS.reason;
早上好!
我有一个 MS Access 拆分数据库(尚未使用 ms sql 服务器),它通过临时查询(想象中称为 "temp"! )
SELECT table_CORE.[core-ID],
table_CORE.[PO],
table_CORE.[Part],
table_CORE.[Part Rev],
table_CORE.[Supplier Doc #],
table_CORE.[Sup Doc Rev],
table_DATES.[date-ID],
table_DATES.[iteration],
table_REJECTIONS.[rejection-ID],
table_REJECTIONS.[iteration],
table_REJECTIONS.[reason],
table_REJECTIONS.[details],
table_REJECTIONS.[timestamp]
FROM
(
(
table_CORE INNER JOIN [TEMP]
ON table_CORE.[core-ID] = TEMP.[date-ID]
)
INNER JOIN [table_DATES]
ON TEMP.[date-ID] = table_DATES.[date-ID]
AND TEMP.[iteration]=table_DATES.[iteration]
)
INNER JOIN table_REJECTIONS
ON TEMP.[date-ID] = table_REJECTIONS.[rejection-ID]
AND TEMP.[iteration]=table_REJECTIONS.[iteration]
WHERE table_CORE.[core-ID] Like '*'
所以最终,这会显示文档拒绝列表 - 这很好,除了每个文档适用于多个部分。
您可以将 PO、Part 和 Part Rev 捆绑在一起,将这些拒绝合并到一个文档中 - 问题是我通常会使用 GROUP BY 子句来执行此操作...
...除了 "details" 字段是备忘录数据类型,当您尝试 GROUP BY 子句时,access 会将其截断为 256 个字符。
有什么解决办法吗?在将其加入拒绝 table 之前,我已经尝试过该组条款,但我最终遇到了同样的问题(因为有多个拒绝将相同的 PO、零件号和修订捆绑在一起)——而且我我正在研究其他方法,但我就是无法理解它所需的 SQL!
非常感谢!
如果您需要更多详细信息,请告诉我!
---其他细节---
示例:
ID PO Part Rev reason details
1 111 A1 A error some_details1
2 111 A1 A error some_details1
3 111 A1 A error some_details1
4 222 A1 A error some_details1
6 222 A1 A error some_details1
7 333 B1 A error some_details1
8 333 B1 A error some_details1
9 444 B1 A error some_details1
10 555 C1 A error some_details1
需要改为:
PO Part Rev reason details
111 A1 A error some_details1
222 A1 A error some_details1
333 B1 A error some_details1
444 B1 A error some_details1
555 C1 A error some_details1
有关连接功能如何工作的注意事项:
当前项目存储在 CORE 中,并通过 core-ID>>date-ID 与具有一对多关系的日期相关联,然后使用迭代来获取零件历史记录中的最新事件。
然后使用 core-ID>>rejeciton-ID AND date-iteration>>rejectioniteration[= 将最近的事件加入拒绝列表45=] 到 return 个当前活跃的拒绝。
原来我可以作弊让 MS 帮我写 SQL!
在查询编辑器中遵循 AllenBrowne 的建议(而不是直接使用 SQL),并使用 FIRST() 而不是 GROUP BY() 聚合 table_REJECTIONS.details修好了!
不过,编写代码真是令人讨厌 - 查询的原始 SQL 如下所示。
SELECT table_CORE.PO,
table_CORE.Part,
table_CORE.[Part Rev],
table_CORE.[Supplier Doc #],
table_CORE.[Sup Doc Rev],
table_REJECTIONS.reason,
First(table_REJECTIONS.details) AS details
FROM
(
(
table_CORE INNER JOIN TEMP
ON table_CORE.[core-ID] = TEMP.[date-ID]
)
INNER JOIN table_DATES
ON
(
TEMP.[iteration] = table_DATES.[iteration]
)
AND
(
TEMP.[date-ID] = table_DATES.[date-ID]
)
)
INNER JOIN table_REJECTIONS
ON
(
TEMP.[iteration] = table_REJECTIONS.[iteration]
)
AND
(
TEMP.[date-ID] = table_REJECTIONS.[rejection-ID]
)
WHERE table_CORE.[core-ID] Like '*'
GROUP BY table_CORE.PO,
table_CORE.Part,
table_CORE.[Part Rev],
table_CORE.[Supplier Doc #],
table_CORE.[Sup Doc Rev],
table_REJECTIONS.reason;