颇有挑战性的 SQL 语句请教。。。。。。。。。。。(200分)

  • 主题发起人 主题发起人 Jason Law
  • 开始时间 开始时间
序号应该表示那个人今天刷了多少次卡了
 
我用的是一种临时表的做法,感觉是特别苯的,不过我自己测试结果没问题~
哪位有什么好方法,希望可以学习学习~~

--1.创建临时表结构
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Tmp_TTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Tmp_TTable]
GO

create table Tmp_TTable
(
TID varchar(4),
TName varchar(10),
TDate varchar(10)
)
GO

--2.修改临时表结构
declare @MaxNUM int,
@NUM int,
@SQL varchar(255)
select @NUM=1
select @MaxNUM=max(NUM) from (select count(*) as NUM from TTable group by TID,TDate) as A

while @NUM<=@MaxNUM
begin
select @SQL='alter table Tmp_TTable add TTime'+ cast(@NUM as varchar)+ ' varchar(10)'
exec(@SQL)
select @NUM=@NUM+ 1
end

--3.插入数据值
declare @TID varchar(4),
@TName varchar(10),
@TDate varchar(10),
@TTime varchar(10)

insert into Tmp_TTable(TID,TName,TDate) select distinct TID,TName,TDate from TTable

declare MyCurOne scroll cursor for
select TID,TName,TDate from TTable order by TID,TDate
open MyCurOne

fetch next from MyCurOne into @TID,@TName,@TDate

while @@FETCH_STATUS=0
begin
declare MyCurTwo cursor for
select TTime from TTable where TID=@TID and TName=@TName and TDate=@TDate
open MyCurTwo
select @NUM=1
fetch next from MyCurTwo into @TTime
while @@FETCH_STATUS=0
begin
select @SQL='update Tmp_TTable set TTime'+ cast(@NUM as varchar)+ '='''+ @TTime+ ''' where TID='''+ @TID+ ''' and TName='''+ @TName+ ''' and TDate='''+ @TDate+ ''''
exec(@SQL)
fetch next from MyCurTwo into @TTime
select @NUM=@NUM+1
end
close MyCurTwo
deallocate MyCurTwo

fetch relative @NUM from MyCurOne into @TID,@TName,@TDate
end

close MyCurOne
deallocate MyCurOne
GO

--4.显示结果
select * from Tmp_TTable
 
没看懂什么意思,顶下
 
如果序号表示那个人今天刷的第几次卡,则
select a.姓名,a.日期,时间1,时间2,时间3,时间4 from (select 姓名,日期,时间 as 时间1 from 表 where 序号=1 )as a
inner join (select 姓名,日期,时间 as 时间2 from 表 where 序号=2 )as b on a.姓名=b.姓名 and a.日期=b.日期
inner join (select 姓名,日期,时间 as 时间3 from 表 where 序号=3 )as c on a.姓名=c.姓名 and a.日期=c.日期
inner join (select 姓名,日期,时间 as 时间4 from 表 where 序号=4 )as d on a.姓名=d.姓名 and a.日期=d.日期
order by a.姓名,a.日期
 
看見好多高手﹐頂﹗
 

Similar threads

后退
顶部