0

のトランザクション テーブル (履歴) がありCreatedDateます。このトランザクションは、従業員のトランザクション テーブルに関連しています。(transact_id の内部結合)

そうは言っても、問題が発生します。これらのテーブルにクエリを実行し、月ごとに状態を取得する必要があります。これは、年の間にCreatedDate変化する可能性があるためです。例: 7 月の従業員の更新により新しい行が作成されますが、これは 3 月の合計には影響しません。

ソリューションはforechのように見えますが、最後にすべての行を結合するにはどうすればよいですか? 結果は次のようになります。

  • 1月 - $123
  • 2月 - $234
  • 3 月 - $123
  • ...

これで各従業員の最後の状態を取得します。

select AllTransact.id_employee, AllTransact.id_department from (

select id_employee, id_department, rank() over (partition by id_employee order by created_date desc) desc_rank
from Transact_Employee TransEmployee
inner join Transact     on TransEmployee.ID_Transact = Transact.ID_Transact 
                        and Transact.Status = 8 
                        and Transact.Created_Date < @currentMonth) AllTransact

where desc_rank = 1

*すべてのコードを 12 回もコピー アンド ペーストしたくありません。:)

4

1 に答える 1

0

多くの列に分割できます。rank() OVER (partition BY [id_employee],datepart(month,[Created_Date]) ORDER BY [Created_Date] DESC)現在持っているものを月ごとに提供します(その月が何年にあるかは関係ないため、年ごとに分割するか、created_date に制限を追加する必要があります)。

于 2013-04-08T21:22:16.537 に答える