会社の方針のために、私が実際に使っている質問はできませんが、内訳と一般的な考えがあります。従業員が勤務しているかどうか、従業員がどこで働いているかを記録した出席登録があります。私はこれと、従業員が5シフトしたその日との間にこれを要約するようにしています。私が座っている問題は、特定の従業員が職場Aで2日間働いてから職場Bに移されたことです。職場Bで数日後、従業員は職場Aに戻ります。出席要約レポート
私の結果私の試みは、従業員が1月1日から職場Aで働き始め、2月10日に仕事シフトが2回しかないことを示しています。私は働く場所にグループを持っており、開始日と終了日は最小と最大の選択です。
SELECT att.Employee, att.Workplace, dte.BeginDate, dte.EndDate, shf.WorkShift FROM
(SELECT * FROM Attendance WHERE WorkDate BETWEEN '1-Jan' AND '30-Jan') att
CROSS APPLY (SELECT COUNT(Shift) WorkShift FROM Attendance WHERE WorkDate BETWEEN '1-Jan' AND '30-Jan' AND Employee = att.Employee AND WorkPlace = att.WorkPlace AND Shift = 'Worked') shf
CROSS APPLY (SELECT MAX(WorkDate) BeginDate, MIN(WorkDate) EndDate FROM Attendance WHERE WorkDate BETWEEN '1-Jan' AND '30-Jan' AND Employee = att.Employee AND WorkPlace = att.WorkPlace) dte
ので、レコードは次のように表示されます。この従業員
(私は非常に悪いグリッドの申し訳ありませんが、私はそれはかなり見えるようにする方法がわからない、あなたはそれが良く見えるように編集することが歓迎以上のもの)| Name | Workplace | beginDate | endDate | WorkShift |
| Jane | WorkPlaceA | 1-Jan | 2-Jan | 2 |
| Jane | WorkPlaceB | 3-Jan | 8-Jan | 5 |
| Jane | WorkPlaceA | 9-Jan | 10-Jan | 2 |
出欠表には、私はあなたがCTEのを使ってこれを実現することができると信じて、この
| Name | Workplace | Date | Shift |
| Jane | WorkplaceA | 1-Jan | Worked |
| Jane | WorkplaceA | 2-Jan | Worked |
| Jane | WorkplaceB | 3-Jan | Worked |
| Jane | WorkplaceB | 4-Jan | Worked |
| Jane | WorkplaceB | 5-Jan | Worked |
| Jane | WorkplaceA | 6-Jan | Absent |
| Jane | WorkplaceA | 7-Jan | Absent |
| Jane | WorkplaceA | 8-Jan | Worked |
| Jane | WorkplaceB | 9-Jan | Worked |
| Jane | WorkplaceB | 10-Jan | Worked |
@Tannerをカウントしていない、私はそのようにすぐに私は再びそれを超える読み始めとして欠けていたが実現しました。 –