第一个表没用,以下两表即可.表名:VsTime
VsID StarTime EndTime
1 2008-4-29 2008-4-29
2 2008-4-28 2008-4-28
3 2008-4-27 2008-4-27 表名:VsResult
ID VsID VsWinArea VsName WinScore
1 1 龙争 张三 1
2 1 虎斗 李四 3
3 2 凤舞 王五 5
4 2 九天 赵六 0
5 3 龙争 张三 4
6 3 九天 赵六 0
VsID StarTime EndTime
1 2008-4-29 2008-4-29
2 2008-4-28 2008-4-28
3 2008-4-27 2008-4-27 表名:VsResult
ID VsID VsWinArea VsName WinScore
1 1 龙争 张三 1
2 1 虎斗 李四 3
3 2 凤舞 王五 5
4 2 九天 赵六 0
5 3 龙争 张三 4
6 3 九天 赵六 0
insert into VsTime values(1 ,'2008-4-29' ,'2008-4-29')
insert into VsTime values(2 ,'2008-4-28' ,'2008-4-28')
insert into VsTime values(3 ,'2008-4-27' ,'2008-4-27')
create table VsResult (ID int,VsID int,VsWinArea varchar(10) , VsName varchar(10) , WinScore int )
insert into VsResult values(1 ,1 ,'龙争' ,'张三' ,1 )
insert into VsResult values(2 ,1 ,'虎斗' ,'李四' ,3 )
insert into VsResult values(3 ,2 ,'凤舞' ,'王五' ,5 )
insert into VsResult values(4 ,2 ,'九天' ,'赵六' ,0 )
insert into VsResult values(5 ,3 ,'龙争' ,'张三' ,4 )
insert into VsResult values(6 ,3 ,'九天' ,'赵六' ,0 )
goselect vsid,
max(case px when 1 then convert(varchar(10),StarTime,120) else '' end) starttime ,
max(case px when 1 then VsWinArea else '' end) VsWinArea ,
max(case px when 1 then VsName else '' end) VsName ,
'vs' vs ,
max(case px when 2 then VsWinArea else '' end) VsWinArea ,
max(case px when 2 then VsName else '' end) VsName ,
max(case px when 1 then WinScore else 0 end) WinScore ,
max(case px when 2 then WinScore else 0 end) WinScore
from
(
select n.* , px = (select count(*) from
(
select a.StarTime , b.* from VsTime a,VsResult b where a.vsid = b.vsid
) m where vsid = n.vsid and id < n.id ) + 1
from
(
select a.StarTime , b.* from VsTime a,VsResult b where a.vsid = b.vsid
) n
) p
group by vsiddrop table VsTime,VsResult/*
vsid starttime VsWinArea VsName vs VsWinArea VsName WinScore WinScore
----------- ---------- ---------- ---------- ---- ---------- ---------- ----------- -----------
1 2008-04-29 龙争 张三 vs 虎斗 李四 1 3
2 2008-04-28 凤舞 王五 vs 九天 赵六 5 0
3 2008-04-27 龙争 张三 vs 九天 赵六 4 0(所影响的行数为 3 行)
*/
create table VsTime(VsID int,StarTime datetime,EndTime datetime )
insert into VsTime values(1 ,'2008-4-29' ,'2008-4-29')
insert into VsTime values(2 ,'2008-4-28' ,'2008-4-28')
insert into VsTime values(3 ,'2008-4-27' ,'2008-4-27')
create table VsResult (ID int,VsID int,VsWinArea varchar(10) , VsName varchar(10) , WinScore int )
insert into VsResult values(1 ,1 ,'龙争' ,'张三' ,1 )
insert into VsResult values(2 ,1 ,'虎斗' ,'李四' ,3 )
insert into VsResult values(3 ,2 ,'凤舞' ,'王五' ,5 )
insert into VsResult values(4 ,2 ,'九天' ,'赵六' ,0 )
insert into VsResult values(5 ,3 ,'龙争' ,'张三' ,4 )
insert into VsResult values(6 ,3 ,'九天' ,'赵六' ,0 )
go
select zzzz.starttime as N'【比赛时间】',
zzzz.VsWinArea1+' '+ zzzz.VsName1+' VS ' +zzzz.VsWinArea2+ ' ' +zzzz.VsName2 as N'【(X组 姓名)VS Y组 姓名】',
rtrim(cast(zzzz.WinScore1 as char(10))) + ':' + rtrim(cast(zzzz.WinScore2 as char(10))) as N'【战果】'
from (
select vsid,
max(case px when 1 then convert(varchar(10),StarTime,120) else '' end) starttime ,
max(case px when 1 then VsWinArea else '' end) VsWinArea1 ,
max(case px when 1 then VsName else '' end) VsName1 ,
'vs' vs ,
max(case px when 2 then VsWinArea else '' end) VsWinArea2 ,
max(case px when 2 then VsName else '' end) VsName2 ,
max(case px when 1 then WinScore else 0 end) WinScore1 ,
max(case px when 2 then WinScore else 0 end) WinScore2
from
(
select n.* , px = (select count(*) from
(
select a.StarTime , b.* from VsTime a,VsResult b where a.vsid = b.vsid
) m where vsid = n.vsid and id < n.id ) + 1
from
(
select a.StarTime , b.* from VsTime a,VsResult b where a.vsid = b.vsid
) n
) p
group by vsid) as zzzzdrop table VsTime,VsResult【比赛时间】 【(X组 姓名)VS Y组 姓名】 【战果】
2008-04-29 龙争 张三 VS 虎斗 李四 1:3
2008-04-28 凤舞 王五 VS 九天 赵六 5:0
2008-04-27 龙争 张三 VS 九天 赵六 4:0
create table VsTime(VsID int,StarTime datetime,EndTime datetime )
insert into VsTime values(1 ,'2008-4-29' ,'2008-4-29')
insert into VsTime values(2 ,'2008-4-28' ,'2008-4-28')
insert into VsTime values(3 ,'2008-4-27' ,'2008-4-27')
create table VsResult (ID int,VsID int,VsWinArea varchar(10) , VsName varchar(10) , WinScore int )
insert into VsResult values(1 ,1 ,'龙争' ,'张三' ,1 )
insert into VsResult values(2 ,1 ,'虎斗' ,'李四' ,3 )
insert into VsResult values(3 ,2 ,'凤舞' ,'王五' ,5 )
insert into VsResult values(4 ,2 ,'九天' ,'赵六' ,0 )
insert into VsResult values(5 ,3 ,'龙争' ,'张三' ,4 )
insert into VsResult values(6 ,3 ,'九天' ,'赵六' ,0 )
goCreate FUNCTION vs(@ID int)
RETURNS nvarchar(500)
AS
begin
declare @ii nvarchar(500)
set @ii=''
select @ii=@ii+' VS '+VsWinArea+' '+VsName from VsResult where VsID=@ID
if (@ii is null)
set @ii=''
else
set @ii=right(@ii,len(@ii)-4)
RETURN @ii
END Create FUNCTION 比分(@ID int)
RETURNS nvarchar(500)
AS
begin
declare @ii nvarchar(500)
set @ii=''
select @ii=@ii+' : '+rtrim(cast(WinScore as nvarchar(10))) from VsResult where VsID=@ID
if (@ii is null)
set @ii=''
else
set @ii=right(@ii,len(@ii)-3)
RETURN @ii
END select StarTime as as N'【比赛时间】',dbo.vs(VsID) as N'【(X组 姓名)VS Y组 姓名】',dbo.比分(VsID) as as N'【战果】' from VsTimedrop FUNCTION vs,比分
drop table VsTime,VsResult
表名:VsResult
ID VsID VsWinArea VsName WinScore
1 1 龙争 张三 1
2 1 虎斗 李四 3
3 2 凤舞 王五 5
4 2 九天 赵六 0
5 3 龙争 张三 4
6 3 九天 赵六 0
这张表里的数据vsid并不是一对一的..有可能数据结果如下:ID VsID VsWinArea VsName WinScore
1 1 龙争 张三 1
2 1 虎斗 李四 3
3 2 凤舞 王五 5
4 2 九天 赵六 0
5 3 龙争 张三 4
6 3 九天 赵六 0
7 3 九天 赵六 1
8 3 九天 赵六 3
9 2 凤舞 王五 5