早上好!
我有一个MS Access拆分数据库(不使用ms sql server(还)),它们将几个表连接到临时查询(富有想象力地称为" 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克劳斯做到这一点......
...除了"详细信息" field是一个memo数据类型,当您尝试GROUP BY子句时,access会将其截断为256个字符。
任何想法如何解决这个问题?我在加入rejeciton表之前尝试了组子句,但我最终遇到了同样的问题(因为有多个拒绝,同一个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 将最近的事件连接到拒绝列表以返回目前主动拒绝。
答案 0 :(得分:0)
事实证明我可以欺骗并让MS为我编写SQL!
遵循AllenBrowne在查询编辑器中的建议(而不是使用SQL Directly),并使用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;