1

すべての従業員を部門 ID、入社日、退職日とともにリストするデータセット (DATASET1) があります。

クエリで、各行が各従業員の雇用された日と勤務日数 (開始日) を表すデータセットを返すようにしたいと考えています。

このクエリを実行するにはどうすればよいですか? よろしくお願いします。

データセット1

DeptID     EmployeeID   StartDate   EndDate
--------------------------------------------
001        123           20100101   20120101   
001        124           20100505   20130101

データセット2

DeptID     EmployeeID    Date       #ofDaysWorked
--------------------------------------------
001        123           20100101   1
001        123           20100102   2
001        123           20100103   3
001        123           20100104   4
....       ....          ........   ...

EIDT: 私の目標は、SSAS でメジャーを導出するために使用されるファクト テーブルを作成することです。私が構築している尺度は「平均勤続年数」です。メジャーはダッシュボードに展開され、ユーザーはカレンダー期間を選択して、月、週、および日にドリルダウンできます。そのため、このような大規模なデータセットから始める必要があります。MDX クエリを使用してこの目標を達成できるかもしれませんが、どのようにすればよいでしょうか?

4

2 に答える 2

2

これを実行するには、再帰的な CTE を使用できます。

;with data (deptid, employeeid, inc_date, enddate) as
(
  select deptid, employeeid, startdate, enddate
  from yourtable
  union all
  select deptid, employeeid,
    dateadd(d, 1, inc_date),
    enddate
  from data
  where dateadd(d, 1, inc_date) <= enddate
) 
select deptid,
  employeeid,
  inc_date,
  rn NoOfDaysWorked
from
(
  select deptid, employeeid,
    inc_date, 
    row_number() over(partition by deptid, employeeid
                      order by inc_date) rn
  from data
) src
OPTION(MAXRECURSION 0)

デモで SQL Fiddle を参照してください

結果は次のようになります。

| DEPTID | EMPLOYEEID |       DATE | NOOFDAYSWORKED |
-----------------------------------------------------
|      1 |        123 | 2010-01-01 |              1 |
|      1 |        123 | 2010-01-02 |              2 |
|      1 |        123 | 2010-01-03 |              3 |
|      1 |        123 | 2010-01-04 |              4 |
|      1 |        123 | 2010-01-05 |              5 |
|      1 |        123 | 2010-01-06 |              6 |
|      1 |        123 | 2010-01-07 |              7 |
|      1 |        123 | 2010-01-08 |              8 |
|      1 |        123 | 2010-01-09 |              9 |
|      1 |        123 | 2010-01-10 |             10 |
|      1 |        123 | 2010-01-11 |             11 |
|      1 |        123 | 2010-01-12 |             12 |
于 2013-01-15T20:21:48.640 に答える
0
SELECT DeptID, EmployeeID, Date, DATEDIFF(DAY, StartDate, '3/1/2011') AS ofDaysWorked
FROM DATASET1

それがうまくいったかどうか見てください!

于 2013-01-15T20:36:30.823 に答える