------解决思路----------------------
create table #t
(
卡号 nvarchar(20),
持卡人 nvarchar(10),
积分次数 int,
积分日期 datetime,
操作人 nvarchar(10),
销售额 numeric(16,1),
发生分 int,
余积分 int,
店号 nvarchar(10),
最后一次兑换积分 int,
最后一次余积分 int,
最后一次兑换日期 datetime
)
go
insert into #t
select '83951',N'黄宝玉',4,'2014-06-12',N'徐苗',97.8,8,43,N'1号店',NULL,NULL,NULL UNION ALL
SELECT '85157',NULL,4,'2014-10-07',N'李秋英',375.4,7,92,N'1号店',-100,9,'2013-10-05' UNION ALL
SELECT '87166',N'黄阿兰',4,'2014-06-29',N'凡艳芳',171.7,13,83,N'1号店',-30,269,'2014-06-29' union all
SELECT '87166',N'黄阿兰',6,'2014-12-26',N'凡小霞',1736.5,156,253,N'1号店',-30,269,'2014-06-29'
declare @卡号 nvarchar(20)
declare @持卡人 nvarchar(10)
declare @积分次数 int
declare @积分日期 datetime
declare @操作人 nvarchar(10)
declare @销售额 numeric(16,1)
declare @发生分 int
declare @余积分 int
declare @店号 nvarchar(10)
declare @最后一次兑换积分 int
declare @最后一次余积分 int
declare @最后一次兑换日期 datetime
select * into #t1 from #t where 1=2
declare cur_c1 cursor fast_forward for select * from #t
open cur_c1
fetch next from cur_c1 into @卡号,@持卡人,@积分次数,@积分日期,@操作人,@销售额,@发生分,@余积分,@店号,@最后一次兑换积分,@最后一次余积分,@最后一次兑换日期
while @@FETCH_STATUS = 0
begin
if not exists(select 1 from #t1 where 卡号 = @卡号)
insert into #t1 select @卡号,@持卡人,@积分次数,@积分日期,@操作人,@销售额,@发生分,@余积分,@店号,@最后一次兑换积分,@最后一次余积分,@最后一次兑换日期
else
insert into #t1 select @卡号,@持卡人,@积分次数,@积分日期,@操作人,@销售额,@发生分,@余积分,@店号,NULL,NULL,NULL
fetch next from cur_c1 into @卡号,@持卡人,@积分次数,@积分日期,@操作人,@销售额,@发生分,@余积分,@店号,@最后一次兑换积分,@最后一次余积分,@最后一次兑换日期
end
CLOSE CUR_C1
DEALLOCATE CUR_C1
SELECT * FROM #T1
drop table #t
drop table #t1
------解决思路----------------------
SELECT T1.卡号,T1.持卡人,T1.积分次数,T1.积分日期,T1.操作人,T1.销售额,T1.发生分,T1.余积分,T1.店号借用#3楼的表数据
,T4.最后一次兑换积分,T4.最后一次余积分,T4.最后一次兑换日期--其他最后一次的列用T4前缀加在这
FROM #t T1 LEFT JOIN
(SELECT * FROM #t T2 WHERE NOT EXISTS(SELECT 1 FROM #t T3 WHERE T2.卡号=T3.卡号 AND T3.积分日期<T2.积分日期))
T4 ON T1.卡号=T4.卡号 AND T1.积分日期=T4.积分日期