0

おはよう!

私は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 を結び付けて、これらの却下を 1 つのドキュメントにまとめることができます。問題は、通常、これを GROUP BY 句で行うことです...

...ただし、「詳細」フィールドはメモ データ型であり、GROUP BY 句を試すと、access によって 256 文字に切り捨てられます。

これを回避する方法はありますか?拒否表に結合する前にグループ句を試しましたが、同じ問題が発生します (同じ 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によって 1 対多の関係で日付に結び付けられます。次に、反復を使用してパーツの履歴の最新のイベントを取得します。

その最新のイベントは、core-ID>>rejeciton-ID AND date-iteration>>rejectioniterationを使用して拒否リストに追加され、現在アクティブな拒否が返されます。

4

1 に答える 1

0

カンニングして、MS に SQL を書いてもらうことができることがわかりました。

(SQL を直接操作する代わりに) クエリ エディターでAllenBrowneからのアドバイスに従い、GROUP BY() の代わりに FIRST() を使用して 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 に答える