2

見つけることができるすべての例を使い果たしましたが、まだ必要な結​​果が得られていません。

複数の顧客で同じ請求書番号が使用されているインスタンスを見つける必要がある請求書テーブルがあります。請求書番号はテーブル内で複数回発生する可能性があり、各レコードは請求書と請求書シーケンス番号で区別されますが、請求書ごとに1人の顧客しか存在しないはずですが、いくつかのエラーが発生しています。

必要なのは、2人以上の顧客がいる請求書のみのレポートです。以下のデータでは、Cust45001301は請求書708の顧客番号ではありません。

Cust No Invoice No  Seq No  Input Date
700180  708 1   9/30/2007
700180  708 2   9/30/2007 
45001301    708 3   9/30/2007
700180  708 4   9/30/2007
700190  709 1   9/30/2007
700190  709 2   9/30/2007

私がやろうとしたのは、クエリごとに単純なグループを取得して、このような複数の顧客がいる請求書のみを表示することです-

[Invoice No] [Cust no]
   708          700180 
   708        45001301

ただし、顧客が2人以上の場合のみ表示したいので、上記の例では、顧客が1人しかないため、請求書709のエントリは表示されません。

[Invoice No] [Cust no]
   708          700180 
   708        45001301
   709          700190
4

2 に答える 2

1

[Invoice No]まず、とのすべての異なる組み合わせを返すクエリを作成します[Cust no]。次に、それをサブクエリとして使用して、1人あたりの顧客数をカウントし、カウントが1より大きい顧客のみに出力を制限[Invoice No]する句を追加します。HAVING

SELECT sub.[Invoice No], Count(*) AS customers
FROM
    (
        SELECT DISTINCT [Invoice No], [Cust no]
        FROM Invoices
    ) AS sub
GROUP BY sub.[Invoice No]
HAVING Count(*) > 1;

次に、それらの請求書が重複している顧客を確認する必要がある場合はINNER JOIN、テーブルにクエリを返しInvoicesます。

SELECT DISTINCT i.[Invoice No], sub2.customers, i.[Cust No]
FROM
    Invoices AS i
    INNER JOIN
    (
        SELECT sub.[Invoice No], Count(*) AS customers
        FROM
            (
                SELECT DISTINCT [Invoice No], [Cust no]
                FROM Invoices
            ) AS sub
        GROUP BY sub.[Invoice No]
        HAVING Count(*) > 1
    ) AS sub2
    ON i.[Invoice No] = sub2.[Invoice No];

Access 2007と、という名前のテーブルのサンプルデータを使用するとInvoices、そのクエリによって次の結果セットが得られます。

Invoice No customers Cust No
708                2   700180
708                2 45001301

これらの重複する請求書番号のすべてのデータを実際に表示したい場合は、2番目のクエリの最初の行を次のように変更します。

SELECT i.[Invoice No], sub2.customers, i.[Cust No], i.[Seq No], i.[Input Date]
于 2013-01-19T23:14:23.547 に答える
0

どうですか:

SELECT inv.[cust no],
       inv.[invoice no],
       inv.[seq no],
       inv.[input date]
FROM   inv
       INNER JOIN (SELECT q.[invoice no],
                          Count(q.[invoice no]) AS [CountOfInvoice No]
                   FROM   (SELECT inv.[invoice no],
                                  inv.[cust no]
                           FROM   inv
                           GROUP  BY inv.[invoice no],
                                     inv.[cust no]) AS q
                   GROUP  BY q.[invoice no]
                   HAVING (( ( Count(q.[invoice no]) ) > 1 ))) AS q2
ON inv.[invoice no] = q2.[invoice no]

ここで、invはテーブルの名前です。

クエリは、複数の顧客番号が関連付けられている請求書番号のすべての詳細と行を返します。

cust no invoice no  seq no  input date
700180      708     4       30/09/2007
45001301    708     3       30/09/2007
700180      708     2       30/09/2007
700180      708     1       30/09/2007
于 2013-01-19T23:22:26.300 に答える