2

プロジェクトと請求書の 2 つのテーブルがあります。データベースは MS Access ( mdb )

プロジェクト テーブルにはフィールドがあります

  1. プロジェクト ID
  2. プロジェクト名
  3. プロジェクトのステータス

請求書テーブルにはフィールドがあります

  1. 請求書ID
  2. ProjectID (外部キー)
  3. InvoiceType (支払済および受領済)
  4. InvoiceChannel (コーディング、デザイン、コンサルティング)
  5. 請求金額

Projects テーブルは、プロジェクト ID を外部キーとして Invoices テーブルと 1 対多の関係にあります。

このような Invoices テーブルのクエリから作成されたテーブルが必要です

MS Access でのグループ化の問題

SQLクエリを使用してこれを達成するにはどうすればよいですか?
または、サーバー側のコーディングを使用して行う必要がありますか (ASP.NET で C# を使用します)。

4

1 に答える 1

2

投稿されたテーブルスキーマには、合計する金額を含むフィールドがありません。私はそれをと呼びAmountます。

まず、クロス集計クエリを作成し、データベースに保存します(私はそれを呼び出しましたct):

TRANSFORM Sum(Amount) AS SumOfAmount
SELECT ProjectID, InvoiceType
FROM Invoices
GROUP BY ProjectID, InvoiceType
PIVOT InvoiceChannel In ("Coding","Designing","Consulting");

これにより、ProjectIDInvoiceTypeが最初の2列になり、「コーディング」、「設計」、「コンサルティング」にそれぞれ1列ずつ追加されます。

合計を取得するには、別のクエリが必要です。

SELECT ct.*, Coding + Designing + Consulting AS Total
FROM ct;

特定のProjectID//のレコードがない場合、クエリはその組み合わせに対して返され、結果として。になることに注意してください。このクエリがAccessで(たとえば経由で)実行される場合は、C#の演算子のように機能する関数を使用できます。InvoiceTypeInvoiceChannelNULLTotalNULLAccess.ApplicationNz??

SELECT ct.*, Nz(Coding,0) + Nz(Designing,0) + Nz(Consulting,0) AS Total
FROM ct;

.mdbOleDbProviderを使用してまたはADO.NET経由でデータにアクセスしている場合は.accdb、おそらく使用できずNz、より複雑なものを使用する必要があります。

SELECT ct.*, 
    Iif(IsNull(Coding), 0, Coding) +
    Iif(IsNull(Designing), 0, Designing) + 
    Iif(IsNull(Consulting), 0, Consulting) AS Total
FROM ct;
于 2012-11-21T08:39:54.280 に答える