1

データベース内の EmpId の合計 = 74。データベース内の 2013 年 9 月のアクティブな日数 = 22 従業員が MIS_Opus テーブルで生産を満たさなかった日付を分離したいと考えています。

FULL OUTER Join が機能しなかったので、except クエリを使用しています。このクエリでは、empid を C# 関数に渡すことで、各従業員の未記入の日付を取得できます。そのループは SQL に行き、74 回 C# に戻ります。SQL自体ですべての従業員の未記入の日付を一度に取得する方法を教えてください。SQL 2012 と VS 2012 の c# を使用しています。

ありがとうございました、

select _Date from MIS_BM_Calendar c
where c.Month = 'September 2013'  and c.DayShiftStatus = 'active'
except
select _Date from MIS_Opus o
where o.EmpId=@Empid
4

1 に答える 1

1

1 つの方法は、cross join. 次に、を使用しleft joinて、その日の従業員エントリがあるかどうかを確認できます。

select  days._Date as TheDay
,       emps.EmpId as EmployeeWithMissingEntry
from    (
        select  distinct _Date
        from    MIS_BM_Calendar
        where   Month = 'September 2013'
                and DayShiftStatus = 'active'
        ) days
cross join -- One row for each combination of employee and date
        (
        select  distinct EmpId
        from    MIS_Opus
        ) emps
left join
        MIS_Opus o
on      o._Date = days._Date
        and o.EmpId = emps.EmpId
where   o._Date is null -- Employee entry for day not found
于 2013-10-22T08:21:46.753 に答える