次の列を持つテーブルがあります。
Document_ID, Customer_ID, Date, LoanedMoney.
新しいLoanedDate
コラムを作成しました。次の方法で日付を入力したいLoanedDate
:
- 前の
Date
日付または前の日付が存在しない場合 (常に -1 日という意味ではありません)、同じDocument_ID
でCustomer_ID
null の場合 -> 値をコピーLoanedMoney
してその値で更新します。 - 以前
Date
(常に -1 日という意味ではありません) が同じDocument_ID
で、Customer_ID
null でない場合 -> コピーしてその値で更新します。 - それ以外の場合
NULL
はLoanedDate
以前の日付を決定するための私のおおよそのロジック(ケースステートメントに入れる方法がわかりません):
SELECT TOP 1 Z1.Date
FROM DBANME Z1
LEFT JOIN DBNAME Z2
ON Z1.Document_ID = Z2.Document_ID AND Z1.Customer_ID = Z2.Customer_ID AND CONVERT(CHAR(8), Z1.Date, 112) < CONVERT(CHAR(8), Z2.Date, 112)
ORDER BY Date DESC
私はこのようなことをしました:
DECLARE @Min datetime, @Prev datetime
SELECT @Min = MIN(Date) FROM DBNAME
UPDATE DBNAME
SET LoanedDate CASE
WHEN (LoanedMoney > 0)
-- SET @Prev =
CASE WHEN @Prev IS NULL THEN Date
ELSE @Prev
ELSE NULL
それを実装する最良の方法は何ですか?
私が持っているもの:
Document_ID, Customer_ID, Date, LoanedMoney, LoanedDate
1, 1, 2012-04-30, 30, NULL
1, 1, 2012-04-29, 50, NULL
1, 1, 2012-04-28, 50, NULL
1, 1, 2012-04-27, 0, NULL
1, 1, 2012-04-26, 20, NULL
私が期待するもの:
Document_ID, Customer_ID, Date, LoanedMoney, LoanedDate
1, 1, 2012-04-30, 30, 2012-04-28
1, 1, 2012-04-29, 50, 2012-04-28
1, 1, 2012-04-28, 50, 2012-04-28
1, 1, 2012-04-27, 0, NULL -- Because LoanedMoney = 0
1, 1, 2012-04-26, 20, 2012-04-26