0

重複の可能性:
SQL クエリのヘルプが必要

これも以前に投稿したかもしれませんが、要件が少し変わったので、これについて助けてください。

私のデータベース構造:

ATTActivity表)

  • Act_ID(PK)
  • Assigned_To_ID (外部キー、参照Emp_ID)
  • Project_ID (FK、参照Project_ID)
  • Product_ID (FK、参照Product_ID)
  • ステータス (可能性がありますNew, OnHold, Cancel, Closed)

Product_Table

  • 製品 ID (PK)
  • 商品名

プロジェクト_テーブル

  • プロジェクト ID (PK)
  • プロジェクト名

Employee_Table

  • 従業員 ID (PK)
  • F_名前。

Emp_Product_Project_Mapping

(この表は基本的に、どの従業員がどの製品とどのプロジェクトに割り当てられているかをマッピングします。1 人の従業員が複数のプロジェクトまたは製品に割り当てられることをマッピングするために、3 つの列すべてに重複入力が許可されています)

  • Emp_IDFK (FK は Emp_ID PK を参照)
  • Product_IDFK (FK は Product_ID PK を参照)
  • Project_IDFK (FK は Project_ID PK を参照)

制約

  • 1つのプロジェクトで --> 複数の従業員が働くことができます
  • 1 従業員 -- > 複数の活動を割り当てることができます ( Act_ID)
  • 任意の時点でStatus、これらの指定された値のいずれかになります。
  • 任意の時点で、アクティビティを 1 つの製品と 1 つのプロジェクトに割り当てることができます。

今私のSQLクエリでやりたいことは負荷チェックです::

アクティビティ ( で表される) は、製品 ( で)のプロジェクト ( ) および特定のステータスのでAct_ID表される従業員に割り当てられます。SQL クエリから 5 つの値を出力する必要があります。Assigned_To_IDProject_IDATT_TableProduct_IDATT_table

  1. 従業員の名前
  2. 製品名
  3. ステータスが新規または処理中の製品 (2) に割り当てられたアクティビティの総数 (ここでは、製品 (2) に関連するすべてのアクティビティをカウントしています)。誰に割り当てられても。従業員とは関係ありません(1)。4番目の部分で必要です)。
  4. 今、従業員(1)が割り当てられている活動の数が必要です((3)から取得した合計数のうち)。私が自分自身を明確にしていることを願っています。3 つ目は、製品に割り当てられたアクティビティの合計 (2 つ目) でした。3位の自分の結果から4位で活動し、1位の社員に配属。
  5. ロード。= (Result in 3)/(Result in 4) * 100 ((Result in 3) は (Result in 4) よりも大きな値です。これは明らかです。)

ここで、従業員が E1 が製品 P1、P2 に取り組んでいるとしましょう。したがって、私のテーブル出力は次のようになります::

1    2     3    4     5
E1   P1    
E1   P2 

したがって、ここで 3、4、5 は、その製品 (P1 または P2) のアクティビティに対応する値を持ちます。

これについて私を助けてください。MSaccess データベースを使用します。ありがとう..

4

1 に答える 1

1

データを 2 つの独立した方法で「グループ化」したいので、単一のGROUP BY句でそれを行うことはできません。代わりに、サブクエリを使用して各製品のアクティビティの総数をカウントする必要があります。GROUP BYここでは、サブクエリを使用して、これらの製品に対する各従業員の活動をカウントしています。これは、1 つのサブクエリとGROUP BY親の a を混在させるよりも理解しやすいと思うからです。

SELECT
  Employee_Table.F_Name,
  Product_Table.Product_Name,
  AllActivities.Count,
  EmployeeActivities.Count,
  EmployeeActivities.Count / AllActivities.Count AS Load
FROM
  Employee_Table, Product_Table
  INNER JOIN (
    SELECT Product_ID, COUNT(*) AS Count
    FROM ATT
    GROUP BY Product_ID
  ) AS AllActivities ON
    AllActivities.Product_ID = Product_Table.Product_ID
  INNER JOIN (
    SELECT Assigned_To_ID, Product_ID, COUNT(*) AS Count
    FROM ATT
    GROUP BY Assigned_To_ID, Product_ID
  ) AS EmployeeActivities ON
        EmployeeActivities.Assigned_To_ID = Employee_Table.Emp_ID
    AND EmployeeActivities.Product_ID     = Product_Table.Product_ID
于 2012-04-29T15:16:46.060 に答える