有关联赛sql实现,高分请教高手

lixueming3000 2008-09-25 03:35:46
//测试表结构
CREATE TABLE [dbo].[team](
[id] [int] IDENTITY(1,1) NOT NULL,
[home] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

//测试数据

insert into team select 'aaa'
union all select 'bbb'
union all select 'ccc'
union all select 'ddd'

//想要的结果
如果是aaa这个队调用的话结果如下:
轮次 主队 客队
1 aaa--bbb
2 aaa--ccc
3 aaa--ddd
4 bbb--aaa
5 ccc--aaa
6 ddd--aaa
如果是bbb这个队调用的话结果如下:
轮次 主队 客队
1 bbb--aaa
2 bbb--ccc
3 bbb--ddd
4 aaa--bbb
5 ccc--bbb
6 ddd--bbb
如果是ccc这个队调用的话结果如下:
轮次 主队 客队
1 ccc--ddd
2 ccc--aaa
3 ccc--bbb
4 ddd--ccc
5 ddd--aaa
6 ddd--bbb
如果是ddd这个队调用的话结果如下:
轮次 主队 客队
1 ddd--ccc
2 ddd--aaa
3 ddd--bbb
4 ccc--ddd
5 aaa--ddd
6 bbb--ddd
以上就是我想要的结果,请看好结果后,找到规则后写语句,先谢谢各位

...全文
199 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixueming3000 2008-11-11
  • 打赏
  • 举报
回复
这个本人已解决,还是谢谢各位的回答
lixueming3000 2008-09-26
  • 打赏
  • 举报
回复
有那位高手有联赛循环赛的实现方法也行,比如说8个队,其中一个队和另外7个队各打两场,现在的问题就是赛程的安排?
qinqinhao 2008-09-26
  • 打赏
  • 举报
回复
ding
HeroHxw 2008-09-26
  • 打赏
  • 举报
回复
DECLARE @TeamID INT
SET @TeamID=1

CREATE TABLE #Result(Row INT IDENTITY(1,1),Home VARCHAR(10),C VARCHAR(10))

INSERT INTO #Result(Home,C)
SELECT a.home as Home,b.home as C
FROM team a,team b
WHERE a.id<>b.id and (a.id=@TeamID or b.id=@TeamID)
ORDER BY CASE WHEN a.id=@TeamID THEN 0 ELSE 1 END,a.ID

SELECT 轮次 =ROW, 主队 =HOME,客队=C FROM #Result

drop table #Result

lixueming3000 2008-09-26
  • 打赏
  • 举报
回复
这个时序不用关心,现在是怎么让这些队,都能看到自已的赛程安排
tim_spac 2008-09-26
  • 打赏
  • 举报
回复
即时序原则:任意一只球队不连续进行比赛?
tim_spac 2008-09-26
  • 打赏
  • 举报
回复
赛程的安排关键是时序,而非排列。
xuehen450 2008-09-25
  • 打赏
  • 举报
回复
RT
yeah920 2008-09-25
  • 打赏
  • 举报
回复
帮你顶一下.
yrwx001 2008-09-25
  • 打赏
  • 举报
回复
這個排序按什麼規則排的?看不出來
lixueming3000 2008-09-25
  • 打赏
  • 举报
回复
只要符合上面结果的规则就行,不用非按我的次序
lixueming3000 2008-09-25
  • 打赏
  • 举报
回复
最新结果如下:
如果是aaa这个队调用的话结果如下:
轮次 主队 客队
1 aaa--bbb
2 ccc--aaa
3 ddd--aaa
4 bbb--aaa
5 aaa--ccc
6 aaa--ddd
如果是bbb这个队调用的话结果如下:
轮次 主队 客队
1 aaa--bbb
2 ddd--bbb
3 bbb--ccc
4 bbb--aaa
5 bbb--ddd
6 ccc--bbb
如果是ccc这个队调用的话结果如下:
轮次 主队 客队
1 ccc--ddd
2 ccc--aaa
3 bbb--ccc
4 ddd--ccc
5 aaa--ccc
6 ccc--bbb
如果是ddd这个队调用的话结果如下:
轮次 主队 客队
1 ccc--ddd
2 ddd--bbb
3 ddd--aaa
4 ddd--ccc
5 bbb--ddd
6 aaa--ddd
-晴天 2008-09-25
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[team](
[id] [int] IDENTITY(1,1) NOT NULL,
[home] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
insert into team select 'aaa'
union all select 'bbb'
union all select 'ccc'
union all select 'ddd'
go
declare @zd varchar(5)
set @zd='aaa' --在此改变所调用的队,可写成函数或存储过程
select 轮次=identity(int,1,1),* into # from
(
select 主队=@zd,客队=home from team where home<>@zd
union all
select 主队=home,客队=@zd from team where home<>@zd
)T
select * from #
go
drop table team,#
/*
轮次 主队 客队
----------- -------------------------------------------------- --------------------------------------------------
1 aaa bbb
2 aaa ccc
3 aaa ddd
4 bbb aaa
5 ccc aaa
6 ddd aaa

(6 行受影响)
*/
-晴天 2008-09-25
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[team](
[id] [int] IDENTITY(1,1) NOT NULL,
[home] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
insert into team select 'aaa'
union all select 'bbb'
union all select 'ccc'
union all select 'ddd'
go
declare @zd varchar(5)
set @zd='aaa'
--select 主队=home,客队=@zd from team where home<>@zd

select 轮次=identity(int,1,1),* into # from
(
select 主队=@zd,客队=home from team where home<>@zd
union all
select 主队=home,客队=@zd from team where home<>@zd
)T
select * from #
go
drop table team,#
lixueming3000 2008-09-25
  • 打赏
  • 举报
回复
没细看那个结果,真的得加一个表,不然看了,好像没办法实现,不好意思对不起各位了,那个赛程表起什么名字都行,只要最后取出来的结果对就行
dobear_0922 2008-09-25
  • 打赏
  • 举报
回复
lixueming3000 2008-09-25
  • 打赏
  • 举报
回复
看了一个加一个赛程表吧,如何实现呢?在线等
dobear_0922 2008-09-25
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[team](
[id] [int] IDENTITY(1,1) NOT NULL,
[home] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

insert into team select 'aaa'
union all select 'bbb'
union all select 'ccc'
union all select 'ddd'

declare @id int
set @id=2 -- 1,2,3,4
select 轮次=row_number() over(order by (case a.id when @id then 0 else 1 end),b.id)
, 主队=a.[home], 客队=b.[home]
from team a join team b on a.id<>b.id and (a.id=@id or b.id=@id)
order by (case a.id when @id then 0 else 1 end),b.id
/*set @id=1
轮次 主队 客队
-------------------- -------------------------------------------------- --------------------------------------------------
1 aaa bbb
2 aaa ccc
3 aaa ddd
4 bbb aaa
5 ccc aaa
6 ddd aaa

(6 行受影响)
*/
/*set @id=2
轮次 主队 客队
-------------------- -------------------------------------------------- --------------------------------------------------
1 bbb aaa
2 bbb ccc
3 bbb ddd
4 aaa bbb
5 ccc bbb
6 ddd bbb

(6 行受影响)
*/

drop table team
新鲜鱼排 2008-09-25
  • 打赏
  • 举报
回复
如果只是简单逻辑的话很好实现。

CREATE TABLE #team([id] [int] IDENTITY(1,1), [home] [nvarchar](50) )

insert into #team select 'aaa'
union all select 'bbb'
union all select 'ccc'
union all select 'ddd'

declare @team varchar(3)
set @team = 'bbb'

select @team + '--' + home from #team
where home <> @team
union all
select home + '--' + @team from #team
where home <> @team

/*
-------------------------------------------------------
bbb--aaa
bbb--ccc
bbb--ddd
aaa--bbb
ccc--bbb
ddd--bbb
*/
drop table #team
lixueming3000 2008-09-25
  • 打赏
  • 举报
回复
想要的结果有误
加载更多回复(10)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧