各プロジェクトに請求された合計時間数を次の形式で表示するクエリを完了しようとしています。
Project Name | Hours
Project A | 2
Project B | 6
Project C | 8
各プロジェクトに請求される時間数をカウントする2つのSQLクエリがあります。各クエリには異なるJOINがあるため、これが必要です。
たとえば、time_records.parent_type ='Task'の場合、Joinは次のようになります。
INNER JOIN time_records
ON time_records.parent_id = project_objects.id
time_records.parent_type ='Project'の場合、結合は次のようになります。
INNER JOIN time_records
ON projects.id = time_records.parent_id
これらの2つのクエリを1つのテーブルに結合しようとしていますが、問題は、プロジェクトごとに1つの一意の行に結合するのではなく、テーブルがプロジェクトを繰り返すことです(ピボットテーブルの機能と同様)。
これが私の現在のクエリです:
(SELECT projects.name AS expr1
, sum(time_records.value) AS expr2
FROM
project_objects
INNER JOIN projects
ON projects.id = project_objects.project_id
INNER JOIN time_records
ON time_records.parent_id = project_objects.id
WHERE
time_records.parent_type = 'Task'
GROUP BY
projects.name)
UNION ALL
(SELECT projects.name AS expr1
, sum(time_records.value) as expr2
FROM
projects
INNER JOIN time_records
ON projects.id = time_records.parent_id
WHERE
time_records.parent_type = 'Project'
GROUP BY
projects.name)
現在の出力は次のとおりです。
Project Name | Hours
Project A | 2
Project B | 6
Project C | 8
Project A | 4
プロジェクトAを1行にして、2行ではなく6時間の値を表示する必要があります。UNION操作を試しましたが、効果がありません。