2012-02-07 21 views
2

特定の日に利用できる容量を返すSQL-Severクエリがあります。 結果は、その特定の日に予定された各割り当てに対して返されます。別のクエリの結果でクエリ結果を除算します。

私の問題は、クエリの結果の各行でその日の合計容量が返されることです。 Excelでリンクされたピボットテーブル(たとえば)の1人のために1日のすべての結果を表示すると、レコードの数に基本容量を掛けた値が得られます。

1人あたりの割り当ての数をカウントする別のクエリを書きました。

容量を最初のクエリから2番目のクエリによって返されたレコードの数で除算したいが、クエリを一緒に結合する方法はわかりません。

これは、容量の日までに割り当てのリストを返すクエリです:

SELECT 
    MSP_EpmAssignmentByDay.TimeByDay, 
    MSP_EpmAssignment.ResourceUID, 
    MSP_EpmAssignmentByDay.AssignmentActualWork, 
    MSP_EpmResourceByDay_UserView.Capacity 
FROM 
    MSP_EpmAssignment MSP_EpmAssignment,  
    MSP_EpmAssignmentByDay MSP_EpmAssignmentByDay, 
    MSP_EpmResourceByDay_UserView 
    MSP_EpmResourceByDay_UserView 
WHERE 
    MSP_EpmAssignmentByDay.AssignmentUID = MSP_EpmAssignment.AssignmentUID 
    AND MSP_EpmResourceByDay_UserView.TimeByDay = MSP_EpmAssignmentByDay.TimeByDay 

は、これは一人あたり一日あたりの割り当て数を返すクエリです:

SELECT 
    count(TimeByDay) as DayCount 
FROM 
    MSP_EpmAssignmentByDay_UserView 
    LEFT JOIN MSP_EpmAssignment_UserView 
    ON MSP_EpmAssignmentByDay_UserView.AssignmentUID = 
    MSP_EpmAssignment_UserView.AssignmentUID 
GROUP BY ResourceUID, TimeByDay 

すべてのヘルプ大いに感謝します。必要なフィールドのみを想定し

おかげ

+0

あなたのコードをフォーマットしてください:^ Kを押し、それを強調表示します。 TIA。 – wildplasser

+0

どのSQL(Oracle、SQLServer、MySQLなど)を使用していますか? –

+0

回答はデータベースによって異なるため、使用しているRDBMSを知る必要があります。 –

答えて

1

はしてみてください、クエリに含まれるものである。また

SELECT 
    MSP_EpmAssignmentByDay.TimeByDay, 
    MSP_EpmAssignment.ResourceUID, 
    SUM(MSP_EpmAssignmentByDay.AssignmentActualWork) TotalWork, 
    MAX(MSP_EpmResourceByDay_UserView.Capacity) Capacity 
FROM 
    MSP_EpmAssignment,  
    MSP_EpmAssignmentByDay, 
    MSP_EpmResourceByDay_UserView 
WHERE 
    MSP_EpmAssignmentByDay.AssignmentUID = MSP_EpmAssignment.AssignmentUID 
    AND MSP_EpmResourceByDay_UserView.TimeByDay = MSP_EpmAssignmentByDay.TimeByDay 
GROUP BY 
    MSP_EpmAssignmentByDay.TimeByDay, 
    MSP_EpmAssignment.ResourceUID 

、MAXの代わりにSUMように、ピボットテーブルで容量に集計操作を変更してみてください。

EDIT:しようと、細部に同じResourceUIDとTimeByDayのレコードのカウントを含めるために:

SELECT 
    MSP_EpmAssignmentByDay.TimeByDay, 
    MSP_EpmAssignment.ResourceUID, 
    MSP_EpmAssignmentByDay.AssignmentActualWork, 
    MSP_EpmResourceByDay_UserView.Capacity, 
    count(*) over (partition by MSP_EpmAssignmentByDay.TimeByDay, 
           MSP_EpmAssignment.ResourceUID) DayCount 
FROM 
    MSP_EpmAssignment MSP_EpmAssignment,  
    MSP_EpmAssignmentByDay MSP_EpmAssignmentByDay, 
    MSP_EpmResourceByDay_UserView 
    MSP_EpmResourceByDay_UserView 
WHERE 
    MSP_EpmAssignmentByDay.AssignmentUID = MSP_EpmAssignment.AssignmentUID 
    AND MSP_EpmResourceByDay_UserView.TimeByDay = MSP_EpmAssignmentByDay.TimeByDay 
+0

質問は実際に私が投稿したコードスニペットよりはるかに広範囲ですが、このレベルで解決されれば、クエリ全体に簡単に適用できます。 例としてピボットテーブルを使用しましたが、データそのものを他の目的のためにこのように構成する必要があり、MAX関数を適用すると機能しません。 容量は、(各ユーザーの1日あたりの容量/割り当て数)として、各割り当て行に対して表示する必要があります。 メインクエリと同様に、MSP_EpmAssignmentByDay.AssignmentActualWorkフィールドにSUMを適用できません。 – VxD021

+0

@ VxD021:次に、使用しているデータベースを教えてください。 –

+0

これはSQL Server 2008ベースのデータベースです。そのMicrosoft Project Server 2010レポートデータベース – VxD021