Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建设备列表逻辑_Sql_Sql Server - Fatal编程技术网

Sql 创建设备列表逻辑

Sql 创建设备列表逻辑,sql,sql-server,Sql,Sql Server,我需要一些逻辑上的帮助,来创建一个足球赛季的赛程表。我有自动设置的球队,每个球队都需要在主客场比赛。我尝试了一个在网上看到的非常复杂的逻辑,并试图操纵它,但我一直收到空的结果,所以我想放弃这个逻辑,重新开始 下面是我的“团队”表: TeamID TeamAbbreviation TeamName LeagueID CountryID 1 MNU Manchester United 1 1 2

我需要一些逻辑上的帮助,来创建一个足球赛季的赛程表。我有自动设置的球队,每个球队都需要在主客场比赛。我尝试了一个在网上看到的非常复杂的逻辑,并试图操纵它,但我一直收到空的结果,所以我想放弃这个逻辑,重新开始

下面是我的“团队”表:

TeamID  TeamAbbreviation   TeamName             LeagueID CountryID
1       MNU                Manchester United    1        1
2       CHE                Chelsea              1        1
3       LIV                Liverpool            1        1
4       ARS                Arsenal              1        1
下面是赛程表的设置,目前我想在这里填充赛程周(一轮比赛)和团队进行相互比赛

[FixtureID] INT IDENTITY(1,1) NOT NULL PRIMARY KEY, 
[WeekNumber] INT NOT NULL, 
[HomeTeamID] INT CONSTRAINT FK_Fixture_HomeTeam FOREIGN KEY REFERENCES [Team](TeamID),
[AwayTeamID] INT CONSTRAINT FK_Fixture_AwayTeam FOREIGN KEY REFERENCES [Team](TeamID), 
[LeagueID] INT CONSTRAINT FK_Fixture_League FOREIGN KEY REFERENCES League(LeagueID)
以下是我在显示空表时尝试但失败的逻辑:

CREATE PROCEDURE [dbo].[Fixture_Insert]

    @HomeTeamID INT,
    @AwayTeamID INT,
    @FixtureDate DATE,
        @FixtureTime TIME,
        @LeagueID INT,
        @SeasonID INT

    AS
    SET NOCOUNT ON
    BEGIN

    DECLARE @Rounds INT

    SELECT @Rounds = count(*) 
    FROM dbo.Team
        IF @Rounds % 2 = 0 
        SET @Rounds = @Rounds - 1

    DECLARE @Matches INT
    SET @Matches = (@Rounds + 1)/2
    DECLARE @Match INT
    DECLARE @Max_Team INT

    SELECT @Max_Team = count(*) 
    FROM dbo.Team

    DECLARE @BotLeft INT
    DECLARE @BotRight INT
    DECLARE @TopRight INT

    --Truncate Table Fixture
    DECLARE @Round INT
    SET @Round = 1
    WHILE @Round <=  @Rounds
    BEGIN
          SET @Match = 1
          WHILE @Match <= @Matches
          BEGIN
                SET @BotLeft = @Rounds/2.0 + 1.25 + @Match - @Round / 2.0
                SET @BotRight = @Rounds/2.0 + @Rounds + 2.75 - @Match - @Round / 2.0
                SET @TopRight = @Rounds - @Match - @Round + 3.0
                IF @topRight > @match
                BEGIN
                      SET @HomeTeamID = @Match
                      SET @AwayTeamID = @TopRight
                END
                ELSE
                BEGIN
                      IF @BotRight = @Rounds + 1 AND @BotLeft = @Match * 2 - 1
                      BEGIN
                            SET @HomeTeamID = @Match
                            SET @AwayTeamID = @Rounds + 1
                      END
                      ELSE
                      BEGIN
                      IF @BotLeft = @BotRight
                            BEGIN
                                  SET @HomeTeamID = @BotLeft
                                  SET @AwayTeamID = @Rounds + 1
                            END
                            ELSE
                            BEGIN
                                  SET @HomeTeamID = @BotLeft
                                  SET @AwayTeamID = @BotRight

                            END

                      END
                END
                IF @AwayTeamID <= @Max_Team and @HomeTeamID <> @AwayTeamID
                INSERT INTO dbo.Fixture (WeekNumber, FixtureDate, FixtureTime, HomeTeamID, HomeScore, AwayTeamID, AwayScore, HomePoints, AwayPoints, LeagueID, SeasonID)
                VALUES (@Round, '10-10-2016', '12:00:00', @HomeTeamID, 2, @AwayTeamID, 1, 3, 0, 1, 1)
                SET @Match = @Match + 1
          END
          SET @Round = @Round + 1
    END

    --- insert home/away swaps
    INSERT INTO dbo.Fixture(WeekNumber, FixtureDate, FixtureTime, HomeTeamID, HomeScore, AwayTeamID, AwayScore, HomePoints, AwayPoints, LeagueID, SeasonID)
    SELECT @Round, '10-10-2016', '12:00:00', @HomeTeamID, 2, @AwayTeamID, 1, 3, 0, 1, 1 
    FROM dbo.Fixture

    END
创建过程[dbo]。[Fixture\u Insert]
@HomeTeamID INT,
@AwayTeamID INT,
@固定日期,
@固定时间,
@国际联盟,
@季节性智力
作为
不计较
开始
声明@roundsint
选择@Rounds=count(*)
来自dbo团队
如果@Rounds%2=0
设置@Rounds=@Rounds-1
声明@Matches INT
设置@Matches=(@Rounds+1)/2
声明@Match INT
声明@Max_团队INT
选择@Max_Team=count(*)
来自dbo团队
声明@BotLeft INT
声明@BotRight INT
声明@TopRight INT
--截台夹具
声明@Round INT
设置@Round=1

虽然@Round您已经使这种方式变得比需要的更复杂了,但您只想在团队ID不匹配的地方(即,团队不能自己比赛)与自己的团队对位

简化示例:

WITH team (teamId, teamName)
AS
(
    SELECT 1,'Manchester United'
    UNION SELECT 2,'Chelsea'
    UNION SELECT 3,'Liverpool'
    UNION SELECT 4,'Arsenal'
)

SELECT
    a.teamId as homeTeamId,
    a.teamName as homeTeam,
    b.teamId as awayTeamId,
    b.teamName as awayTeam
FROM team a
CROSS JOIN team b
WHERE a.teamId != b.teamId

请注意,目前还不清楚如何计算
周数
,但我建议您看看

您将这种方法变得比需要的更复杂-您只想在团队ID不匹配的情况下(即,团队无法自己比赛)使用自己的团队表

简化示例:

WITH team (teamId, teamName)
AS
(
    SELECT 1,'Manchester United'
    UNION SELECT 2,'Chelsea'
    UNION SELECT 3,'Liverpool'
    UNION SELECT 4,'Arsenal'
)

SELECT
    a.teamId as homeTeamId,
    a.teamName as homeTeam,
    b.teamId as awayTeamId,
    b.teamName as awayTeam
FROM team a
CROSS JOIN team b
WHERE a.teamId != b.teamId
请注意,目前尚不清楚如何计算
周数
,但我建议您查看