従業員は1週間に最大3つのプロジェクトに関わり、各プロジェクトでは2つの異なるタスクを実行できます。 私はunion allを使用して1つのテーブルから別々のフィールドに参加していますので、実行されたタスクごとに別々の行が表示されます(従業員1人あたり最大6行)。最終的にシステム内の時計に参加するので、各従業員に支払う金額を特定のプロジェクトのタスクに割り当てることができ、お金がどこにあるかをより正確に把握することができます。組合での集計すべて
私は分割する番号があるので、タスクの量を数えて(各従業員の行数を数える)手段が必要です。
私はいくつかの場所でグループを試してみましたが、1つしか表示されません(おそらく選択範囲内に一意のフィールドがないためです。
特定のフィールドでカウントを行うべきですか?または別の方法がありますか?
現在SQLクエリ
DECLARE @WeekCommencing date = '2017-04-03'
select SageID, a.EmployeeID, a.ProjectID, a.TaskID, a.FlatRate, a.PayRate from
( Select distinct Employee.SageID, EmployeeProject.EmployeeID, EmployeeProject.ProjectID, EmployeeProject.TaskID, Employee.FlatRate, Employee.PayRate from
( Select EmployeeID, ProjectID1 as ProjectID, Project1TaskID1 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID1 is not null and Project1TaskID1 is null
union all
Select EmployeeID, ProjectID1 as ProjectID, Project1TaskID1 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID1 is not null and Project1TaskID1 is not null
union all
Select EmployeeID, ProjectID1 as ProjectID, Project1TaskID2 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID1 is not null and Project1TaskID2 is not null
union all
Select EmployeeID, ProjectID2 as ProjectID, Project2TaskID1 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID2 is not null and Project2TaskID1 is null
union all
Select EmployeeID, ProjectID2 as ProjectID, Project2TaskID1 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID2 is not null and Project2TaskID1 is not null
union all
Select EmployeeID, ProjectID2 as ProjectID, Project2TaskID2 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID2 is not null and Project2TaskID2 is not null
union all
Select EmployeeID, ProjectID3 as ProjectID, Project3TaskID1 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID3 is not null and Project3TaskID1 is null
union all
Select EmployeeID, ProjectID3 as ProjectID, Project3TaskID1 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID3 is not null and Project3TaskID1 is not null
union all
Select EmployeeID, ProjectID3 as ProjectID, Project3TaskID2 as TaskID, WeekCommencing
FROM ProjectEmployee
WHERE ProjectID3 is not null and Project3TaskID2 is not null
) as EmployeeProject
inner join
Employee on EmployeeProject.EmployeeID = Employee.EmployeeID
where WeekCommencing = @WeekCommencing
) as a
inner join
( Select ProjectEmployeeID, EmployeeID from -- remove duplicates if info is inserted multiple times
( Select ProjectEmployeeID, EmployeeID, ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY ProjectEmployeeID DESC) EmployeeDup
FROM ProjectEmployee
) a
WHERE EmployeeDup = 1
) as c
on a.EmployeeID = c.EmployeeID
Order by a.flatrate, a.SageID
上記から出力される電流Iは、追加する必要 - 所望の出力は、(上述した第2の画像と同じです)がありますが、LineCountという特別な列があります
LineCount
5
5
5
5
5
2
2
1
2
2
をしてください示唆したALLとUNIONを変更しました。 – jarlh
なぜProjectID1がnullでなく、Project1TaskID1がnullであるか、およびProjectID1がnullではなくProject1TaskID1がnullでないクエリを持っていますか?そのシナリオのすべてのケースをカバーする「WHERE ProjectID1がnullでないクエリ」はありませんか? – Jens
あなたがあなたのクエリでいくつかの組合を繰り返したと思う...さらに、いくつかのサンプルデータ(CREATEとINSERTスクリプト)を投稿すると非常に便利です – etsa