2

我已经用尽了所有我能找到的例子,但我仍然没有得到我需要的结果。

我有一个发票表,我需要在其中找到在多个客户上使用相同发票号的任何实例。一个发票编号可以在表中出现多次,每条记录都用发票和发票序号区分,但每张发票应该只有一个客户,但有些错误已经悄悄出现。

我需要的是只有那些有两个或更多客户的发票的报告。在下面的数据中,客户 45001301 不应是发票 708,seq 3 的客户编号。

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

但是我只想看到有两个或更多客户的那些,所以在上面的例子中我看不到发票 709 的条目,因为它只有一个客户。

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

2 回答 2

1

首先创建一个返回 和 的所有不同组合的[Invoice No]查询[Cust no]。然后将其用作子查询,在其中计算每个客户的数量[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

如果您真的想查看这些重复发票编号的所有数据,请将第二个查询的第一行更改为:

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 回答