1

搭乗犬小屋での請求履歴 (および領収書の比較) を簡素化するクエリに取り組んでいます。

手動で行うのではなく、ソフトウェアが作成するデータベースからデータをスクレイピングする作業を行っています。かなり良いスタートを切ったと思いますが、少し問題があります。

Microsoft Access を使用して、すべての情報を含むいくつかのテーブル間にいくつかのリレーションシップ (INNER JOINS を使用) を追加し、次のような SQL ステートメントを作成しました。

SELECT 
  Invoices.InDate, 
  Pets.PtPetName, 
  [IIQuantity]*[IIEach] AS Expr1, 
  Clients.CLLastName, 
  InvoiceItems.IIItemCodeDesc, 
  Invoices.InSeq
FROM 
  (((Clients INNER JOIN Pets ON Clients.CLSeq = Pets.PtOwnerCode) 
INNER JOIN 
  Invoices ON Clients.CLSeq = Invoices.InClientSeq) 
INNER JOIN 
  InvoiceItems ON (Invoices.InSeq = InvoiceItems.IIInvSeq) 
               AND (Pets.PtSeq = InvoiceItems.IIPetSequence)) 
INNER JOIN 
  Inventory ON InvoiceItems.IIItemCode = Inventory.InvSeq
WHERE 
  (((Invoices.InDate)>#12/31/2012#))
ORDER BY 
  Invoices.InSeq;

これは私に次のようなものを与えます:

  DATE   | NAME | TOTAL | LNAME | INVSEQ
----------------------------------------
1/1/2013 | ODIE |   15  | SMITH | 12344
1/1/2013 | ODIE |   60  | SMITH | 12344
1/1/2013 | YODA |   10  | QWERT | 12345
1/1/2013 | YODA |   25  | QWERT | 12345
1/1/2013 | YODA |   80  | QWERT | 12345
1/1/2013 | C3PO |   10  | QWERT | 12345
1/1/2013 | C3PO |   80  | QWERT | 12345

この場合、ODIE は入浴と搭乗、YODA は入浴と搭乗、その他の処理を行いましたが、C3PO は入浴と搭乗だけを行ったために発生しています。

私が欲しいのは:

  DATE   | NAME | TOTAL | LNAME | INVSEQ
----------------------------------------
1/1/2013 | ODIE |   75  | SMITH | 12344
1/1/2013 | YODA |  115  | QWERT | 12345
1/1/2013 | C3PO |   90  | QWERT | 12345

したがって、基本的に、いずれかまたはすべての invseq で petname と invseq が同じ場合は、合計金額 (Expr1) を加算して 1 行にします。

私は SQL と Access をいじり始めたばかりで、このようなことをうまくやり遂げようとしています。さまざまなテーブルについてもう少し情報を提供できます (ただし、私ではなく犬舎ソフトウェアがそれらを処理するように作成されているため、それらはすべてかなり面倒です)。

WHERE date >約 15,000 行あり、私のコンピューターはそれを好まなかったため、絶対に必要です。これにより、非常に使いやすい〜500に削減されます。

Excel にエクスポートして、代わりに Excel マジックを実行する方が簡単でしょうか? 私は良い解決策を得たいと思っていますが、特に私が良い解決策だと思っていたものではありません。

4

1 に答える 1

3

集計関数を使用して各ペットsum()の値を取得したいだけのように思えます。total

SELECT 
  Invoices.InDate, 
  Pets.PtPetName, 
  SUM([IIQuantity]*[IIEach]) AS Total, 
  Clients.CLLastName, 
  Invoices.InSeq
FROM 
  (((Clients INNER JOIN Pets ON Clients.CLSeq = Pets.PtOwnerCode) 
INNER JOIN 
  Invoices ON Clients.CLSeq = Invoices.InClientSeq) 
INNER JOIN 
  InvoiceItems ON (Invoices.InSeq = InvoiceItems.IIInvSeq) 
               AND (Pets.PtSeq = InvoiceItems.IIPetSequence)) 
INNER JOIN 
  Inventory ON InvoiceItems.IIItemCode = Inventory.InvSeq
WHERE (((Invoices.InDate)>#12/31/2012#))
GROUP BY Invoices.InDate, 
  Pets.PtPetName, 
  Clients.CLLastName, 
  Invoices.InSeq
ORDER BY  Invoices.InSeq;

GROUP BY集約関数が追加されると、節が追加されたことに気付くでしょう。InvoiceItems.IIItemCodeDesc目的の結果に含まれているように見えなかったため、列の組み込みを削除しました。この説明列にboardingbathなどが含まれ、ペットに複数の個別のエントリがある場合、これらの個別のコードの説明ごとに個別の行が表示されます。

于 2013-04-27T23:13:32.663 に答える