1
Manager | Employee  |HireDate
----------------------------------------
ManagerA| EmpA      |1/1/2012
managerA| EmpB      |1/15/2012
ManagerB| Emp C     |2/1/2012
ManagerA| Emp D     |2/15/2012
ManagerB| Emp E     |2/8/2012

各マネージャーのボーナス額は、その月に採用された新入社員の数に基づいて計算されます。元。各マネージャーは、最初の採用で1000を取得し、次の採用ごとに500を追加で取得します。

ほぼ各レコードにシードがあるようです

Manager | Employee  |HireDate   | Seed
------------------------------------------------
ManagerA| EmpA      |1/1/2012   | 1
managerA| EmpB      |1/15/2012  | 2
ManagerB| Emp C     |2/1/2012   | 1
ManagerA| Emp D     |2/15/2012  | 1
ManagerB| Emp E     |2/8/2012   | 2

ボーナスは、1000 +(seed-1)*500としてのシードの関数です。

シードの生成についてサポートが必要です。ストアドプロシージャを使用してシードまたは関数を生成する必要があるかどうかわかりません。

最終的には以下のようなテーブルを生成したい

Manager | Employee  |HireDate   | Bonus
-------------------------------------------------
ManagerA| EmpA      |1/1/2012   | 1000
managerA| EmpB      |1/15/2012  | 1500
ManagerB| Emp C     |2/1/2012   | 1000
ManagerA| Emp D     |2/15/2012  | 1000
ManagerB| Emp E     |2/8/2012   | 1500
4

1 に答える 1

0

種を手に入れるには

Select
     *
    ,ROW_NUMBER() Over(Partition By Manager, Year(HireDate), Month(HireDate) Order By HireDate) As Seed
From
    YourTable

ボーナスを直接受け取るには

Select
     *
    ,1000 + (Seed - 1) * 500 As Bonus
From
    (
        Select
             *
            ,ROW_NUMBER() Over(Partition By Manager, Year(HireDate), Month(HireDate) Order By HireDate) As Seed
        From
            YourTable
) T
于 2012-10-10T19:12:10.557 に答える