1

私がやりたいことが可能かどうかはわかりませんが、可能であれば、おそらく私が理解できない本当に簡単な解決策です. ただし、物事がある程度複雑になると、頭が回転し始めます。私の無知をお許しください。

多数のテーブルが相互に結合されている学校用に、MS Access 2007 でデータベースを実行しています。複数のテーブルから情報を取得するクエリを作成しようとしています。さまざまな顧客の売上と支払いの情報を調べて、いくつかの異なるリンクされたテーブルから情報を引き出しています。各販売は、コース料金、登録料、書籍料金、その他の 4 つのカテゴリのいずれかに分類されます。各顧客は複数の購入を行うため、それぞれが Sales テーブルの個別のエントリになります。支払い情報も独自のテーブルにあります。

私のSQLは現在次のようになっています:

    SELECT StudentContracts.CustomerID, (Customers.CFirstName & " " & Customers.CLastName) AS Name, Customers.Nationality, Courses.CourseTitle, (StudentContracts.ClassesBought + StudentContracts.GiftClasses) AS Weeks, StudentContracts.StartDate, Sales.SaleAmount, SaleType.SaleType, Sales.DueDate,  Payments.PaymentAmount

FROM (
    (
        (Customers INNER JOIN StudentContracts ON Customers.CustomerID = StudentContracts.CustomerID)
            INNER JOIN Payments ON Customers.CustomerID = Payments.CustomerID) 
    INNER JOIN 
        (SaleType INNER JOIN Sales ON SaleType.SalesForID = Sales.SalesForID) 
    ON Customers.CustomerID = Sales.CustomerID) 
INNER JOIN 
    (
        (Courses INNER JOIN Classes ON Courses.CourseID = Classes.CourseID)
     INNER JOIN StudentsClasses ON Classes.ClassID = StudentsClasses.ClassID)
 ON Customers.CustomerID = StudentsClasses.CustomerID;

これは機能し、必要な情報が表示されます。ただし、次のように、販売ごとに 1 つのレコードを取得しています。

CustomerID  Name ... SaleAmount  SaleType  PaymentAmount
1           Bob      $600        Course    $1000
1           Bob      $300        RgnFee    $1000
1           Bob      $100        Book      $1000

私が必要とするのは、顧客ごとに 1 行ですが、値フィールドに販売金額がリストされている行の独自の列にある各販売タイプです。そのとおり:

CustomerID  Name ... Course  RgnFee  Book  Others  PaymentAmount
1           Bob      $600    $300    $100          $1000

誰かが私が何をすべきか/する必要があるかを助け、おそらく説明できますか?

前もって感謝します!

4

1 に答える 1

1

作成済みのクエリからクロス集計を作成できます。クエリをクエリ デザイン グリッドに追加し、クエリの種類から [クロス集計] を選択し、1 つまたは複数の行、列、および値を選択します。

言う:

TRANSFORM Sum(t.SaleAmount) AS SumOfSaleAmount
SELECT t.ID, t.Name, Sum(t.SaleAmount) AS Total
FROM TableQuery t
GROUP BY t.ID, t.Name
PIVOT t.SaleType

特定の順序が必要な場合は、プロパティ シートを編集して列見出しを含めるか、SQL に In ステートメントを追加することができます。列見出しを追加すると、データが利用可能かどうかに関係なく、各列に列が含まれます。さらに重要なことに、データがリストされていない場合、データのある列含まれません。

TRANSFORM Sum(t.SaleAmount) AS SumOfSaleAmount
SELECT t.ID, t.Name, Sum(t.SaleAmount) AS Total
FROM TableQuery t
GROUP BY t.ID, t.Name
PIVOT t.SaleType In ("Course","RgnFee","Book","Others");
于 2012-08-13T10:25:29.120 に答える