-- 用控制流和循环语句完成数据处理
/*
问题原帖: http://topic.csdn.net/u/20090713/09/4f48ea54-48f7-4252-ae57-291e00e6bcc4.html
sql 语句,根据表中信息,一个人一天生成六条数据,每天都是固定的六条数据,时间没有就补或::
*/
--1 数据表准备
create table #t ( workday varchar ( 20), StaffName varchar ( 20), Time varchar ( 20))
insert into #t
select '2009-7-11' , ' 李飞 ' , '8:26' union all
select '2009-7-11' , ' 李飞 ' , '11:32' union all
select '2009-7-11' , ' 李飞 ' , '13:20' union all
select '2009-7-11' , ' 李飞 ' , '17:34' union all
select '2009-7-11' , ' 李飞 ' , '18:22' union all
select '2009-7-11' , ' 李飞 ' , '21:02' union all
select '2009-7-11' , ' 张红 ' , '8:22' union all
select '2009-7-11' , ' 张红 ' , '11:35' union all
select '2009-7-11' , ' 张红 ' , '13:18' union all
select '2009-7-11' , ' 张红 ' , '17:39' union all
select '2009-7-11' , ' 张红 ' , '18:37' union all
select '2009-7-11' , ' 张红 ' , '21:09' union all
select '2009-7-11' , ' 王五 ' , '8:22' union all
select '2009-7-11' , ' 王五 ' , '11:35' union all
select '2009-7-11' , ' 王五 ' , '13:18' union all
select '2009-7-11' , ' 王五 ' , '17:39'
--drop table #t
-- 理解楼主意思,检查每天同一用户应该有六条数据,如果不够六条则自动生成语句补全,时间设为 :0 。
--2 执行部分
declare @sn varchar ( 20), @st varchar ( 20)
WHILE -- 循环控制
exists( select StaffName from #t where StaffName is not NULl group by StaffName having count ( 1) != 6 )
BEGIN -- 条件控制
select @sn= StaffName, @st= workday from #t group by StaffName, workday having count ( 1) != 6
insert into #t select @st, @sn, '0:0'
IF not exists( select StaffName from #t where StaffName is not NULl group by StaffName having count ( 1) != 6 )
BREAK
ELSE
CONTINUE
END
--3 检查部分
select * from #t
/*
workday StaffName Time
2009-7-11 李飞 8:26
2009-7-11 李飞 11:32
2009-7-11 李飞 13:20
2009-7-11 李飞 17:34
2009-7-11 李飞 18:22
2009-7-11 李飞 21:02
2009-7-11 张红 8:22
2009-7-11 张红 11:35
2009-7-11 张红 13:18
2009-7-11 张红 17:39
2009-7-11 张红 18:37
2009-7-11 张红 21:09
2009-7-11 王五 8:22
2009-7-11 王五 11:35
2009-7-11 王五 13:18
2009-7-11 王五 17:39
2009-7-11 王五 0:0
2009-7-11 王五 0:0
*/