0

早上好!

我有一个 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 子句来执行此操作...

...除了“详细信息”字段是备忘录数据类型,当您尝试使用 GROUP BY 子句时,访问会将其截断为 256 个字符。

任何想法如何解决这个问题?在将 group 子句加入拒绝表之前,我已经尝试过 group 子句,但我最终遇到了同样的问题(因为同一 PO、Part Number 和 Revision 绑定在一起的多个拒绝) - 我正在调查其他方法,但我就是无法理解它所需的 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

注意 join 函数是如何工作的:

当前项目存储在 CORE 中,并通过core-ID>>date-ID以一对多关系绑定到日期,然后使用迭代来获取部件历史中的最新事件。

然后使用core-ID>>rejeciton-IDdate-iteration>>rejectioniteration将最近的事件加入到拒绝列表中,以返回当前活动的拒绝。

4

1 回答 1

0

事实证明,我可以作弊并让 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;
于 2016-07-15T13:20:54.940 回答