【问题标题】:(MS ACCESS) SQL to group joined statement(MS ACCESS) SQL 到组加入的语句
【发布时间】:2016-07-14 09:40:04
【问题描述】:

早安!

我有一个 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

关于连接功能如何工作的注意事项:

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

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

【问题讨论】:

  • 为什么需要在详细信息字段上进行分组?您是否有查询失败的示例,是否有示例数据来显示您希望从查询中得到什么?
  • @dbmitch 这就是问题的症结所在——我们实际上有重复的拒绝,需要按采购订单/零件编号/修订进行分组——然后绑定到剩余的详细信息字段——但我不能让我了解仅针对 PO/Part/Revision 的 Group BY 子句,然后将其正确连接到详细信息字段。稍后将发布更多详细信息

标签: ms-access-2010 jet-sql


【解决方案1】:

事实证明,我可以作弊并让 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2011-03-04
    • 2017-01-10
    • 2011-04-28
    相关资源
    最近更新 更多