質問

次の2つの表があります。

1)企業

ID      CompanyName      Abbreviation     Notes  
1        CompanyA             CA          ...  
2        CompanyB             CB          ...  
3        CompanyC             CC          ...

2)PlannedDeployments

ID      CompanyID      TypeID      DepDate      NumDeployed  
1          1             2         09/2010          5  
2          1             2         10/2010          5
3          1             3         09/2010          3
4          1             3         10/2010          3
5          1             4         10/2010          4
6          2             2         12/2010          10
7          2             4         10/2010          1
8          3             2         11/2010          6

TypeIDは、どのタイプの人が展開されているかを説明する1〜5の数であることに注意してください。このクエリの目的のために、私は各企業のタイプ2従業員に興味があり、次に各日付のタイプ3と4の合計に興味があります。私が最終的に終わらせたいのは、次のように見えるクロススタブです。

クロススタブ

Date/Company    CompanyA    CompanyB    CompanyC     SumOfTypes3and4
09/2010            5                                        3
10/2010            5                                        8
11/2010                                    6                
12/2010                        10

問題は、その最終列 - タイプ3とタイプ4の従業員の合計です。私が持っている現在のクロススタブには、その合計列以外のすべてが含まれており、次のようになります。

TRANSFORM Sum(PlannedDeployments.NumDeployed) AS ["NumDeployed"]
SELECT PlannedDeployments.DepDate
FROM PlannedDeployments LEFT JOIN Companies ON Companies.ID=PlannedDeployments.CompanyID
WHERE PlannedDeployments.TypeID=2 AND (PlannedDeployments.DepDate Between FormFieldValue("Form", "Control") AND FormFieldValue("Form", "Control"))
GROUP BY PlannedDeployments.DepDate
PIVOT Companies.CompanyName;

句の2番目の部分は、何らかの形式の制御によってデータを制限するだけです。とにかく - 私はその最後のコラムを取得するのに多くの問題を抱えています。誰かがアイデアを持っていますか?

編集:以下のRemouが提供するソリューションに基づいて、最終的なクエリが次のようになったものです。

TRANSFORM Sum(PlannedDeployments.NumDeployed) AS ["NumDeployed"]
SELECT PlannedDeployments.DepDate, q.SumOfNumDeployed
FROM (SELECT PlannedDeployments.DepDate, Sum(PlannedDeployments.NumDeployed) AS SumOfNumDeployed
FROM PlannedDeployments
WHERE (((PlannedDeployments.[TypeID]) In (3,4)))
GROUP BY PlannedDeployments.DepDate) AS q 
RIGHT JOIN (PlannedDeployments 
INNER JOIN Companies ON PlannedDeployments.CompanyID = Companies.ID) 
ON q.DepDate = PlannedDeployments.DepDate
WHERE PlannedDeployments.TypeID=2 
   AND (PlannedDeployments.DepDate Between FormFieldValue("Form", "Control") 
   AND FormFieldValue("Form", "Control"))
GROUP BY PlannedDeployments.DepDate, q.SumOfNumDeployed
PIVOT Companies.CompanyName;
役に立ちましたか?

解決

サブクエリを使用できます。

TRANSFORM Sum(PlannedDeployments.NumDeployed) AS ["NumDeployed"]
SELECT PlannedDeployments.DepDate, Sum(q.SumOfNumDeployed) AS SumOfSumOfNumDeployed
FROM (SELECT PlannedDeployments.DepDate, Sum(PlannedDeployments.NumDeployed) AS SumOfNumDeployed
FROM PlannedDeployments
WHERE (((PlannedDeployments.[TypeID]) In (3,4)))
GROUP BY PlannedDeployments.DepDate) AS q 
RIGHT JOIN (PlannedDeployments 
INNER JOIN Companies ON PlannedDeployments.CompanyID = Companies.ID) 
ON q.DepDate = PlannedDeployments.DepDate
WHERE PlannedDeployments.TypeID=2 
   AND (PlannedDeployments.DepDate Between FormFieldValue("Form", "Control") 
   AND FormFieldValue("Form", "Control"))
GROUP BY PlannedDeployments.DepDate
PIVOT Companies.CompanyName;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top