-1

私はこれらの2つのテーブルを持っています:

表 1: CustomerName BillDate

CITY - BEAUTIFICATION LM            2013-05-30 00:00:00.000
CITY - BEAUTIFICATION LM            2013-06-28 00:00:00.000
CITY - PARKS/RT 66                  2012-07-12 00:00:00.000
CITY - PARKS/RT 66                  2012-07-12 00:00:00.000

等々...

Table2 には次のフィールドがあります: CycleStartDate

次のように、Table1 から Table2 にデータを挿入します。一意の customerName ごとに、CycleStartDate は前のレコードの BillDate です。以前のレコードが存在しない場合は、NULL を 2013-07-1 00:00:00.000 に置き換えます。

そのようなことができるでしょうか?

4

2 に答える 2

0

2012年より前のSQL Serverを使用している場合は、これを試してください

select T.CustomerName, isnull(TP.BillDate, '20130701') as CycleStartDate
from Table1 as T
   outer apply (
       select top 1 T2.BillDate
       from Table1 as T2
       where T2.CustomerName = T.CustomerName and T2.BillDate < T.BillDate
       order by T2.BillDate desc
   ) as TP

SQL Server 2012 を使用している場合は、LAG() 関数を参照してください。

于 2013-08-12T19:39:40.110 に答える
0

SQL Server 2005 以降を想定した 1 つの方法を次に示します。

;WITH CTE AS
(
    SELECT  CustomerName,
            BillDate,
            RN1=ROW_NUMBER() OVER(PARTITION BY CustomerName ORDER BY BillDate),
            RN2=ROW_NUMBER() OVER(PARTITION BY CustomerName ORDER BY BillDate DESC)
    FROM dbo.Table1
)
INSERT INTO dbo.Table2(CustomerName, CycleStartDate)
SELECT  CustomerName,
        CASE WHEN RN2 = 1 THEN '20130701' ELSE CycleStartDate END
FROM CTE
WHERE RN1 = 1
于 2013-08-12T19:34:49.213 に答える