SQL Server将以前的值插入到新列中
我有两张桌子: 表1: 客户名称账单日期SQL Server将以前的值插入到新列中,sql,sql-server,Sql,Sql Server,我有两张桌子: 表1: 客户名称账单日期 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
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
等等
表2有一个字段:CycleStartDate
我想将表1中的数据插入到表2中,如下所示:
对于每个唯一的customerName,CycleStartDate是上一条记录中的BillDate。如果以前的记录不存在,则将空值替换为2013-07-1 00:00:00.000
我们是否有可能做到这一点?好吧,假设SQL Server 2005+,这里有一种方法:
;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
如果SQL Server少于2012,请尝试以下操作
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,请参见函数您所说的上一条记录中的账单日期是什么意思?您是否试图说,如果客户有两个日期,则应选择较小的日期?例如,如果是客户城市-美化LM CyclestartDate应为2013-05-30 00:00:00.000似乎是:的副本应修改原件,而不是再次发布。