选择为比赛和球队显示不正确的结果

时间:2016-06-03 10:55:31

标签: sql sql-server

根据我在下面的查询,我有几个问题:

SELECT
    RANK() OVER (PARTITION BY a.LeagueID ORDER BY a.LeagueID) AS WeekNumber,
    a.TeamID AS HomeTeamID,
    a.TeamAbbreviation AS HomeTeam,
    b.TeamID AS AwayTeamID,
    b.TeamAbbreviation AS AwayTeam,
    a.LeagueID AS HomeLeague,
    b.LeagueID AS AwayLeague
FROM 
    dbo.Team a
CROSS JOIN 
    dbo.Team b
WHERE 
    a.TeamID != b.TeamID
    AND b.TeamAbbreviation = 'CHE' OR a.TeamAbbreviation = 'CHE'
    AND a.LeagueID = b.LeagueID

目前查询显示以下结果:

enter image description here

这是不正确的,我需要帮助重构结果。我想要实现的是:

  1. 对于团队所玩的每场比赛(在此示例中为“CHE”),WeekNumber列需要更新以包含正确的一轮赛程。有多个团队,所以当所有团队玩1周时,它应显示WeekNumber'1',然后下一轮比赛应显示WeekNumber'2'等。

  2. 显示'CHE'对阵所有球队时,他们真的应该只对阵同一联赛的球队(因此a.LeagueID = b.LeagueID)。在屏幕截图中,它显示了团队与其他联赛(其他联盟ID)的其他球队比赛。

  3. 我需要更改才能使其正常工作?

    期望的输出:

    WeekNumber HomeTeamID HomeTeam AwayTeamID AwayTeam HomeLeague Away League
    1          4           ARS      19        CHE       1         1
    2          14          BRC      19        CHE       1         1
    3          15          BRR      19        CHE       1         1
    

1 个答案:

答案 0 :(得分:1)

最好使用["tagihan": { "id":20, "no_rek_pelanggan":11117, "keadaan_meteran":0, "angka_meteran":600, "status":0 }]'而不是JOIN。但你的问题是围绕条件的括号。

试试这个:

CROSS JOIN

您可以将最后一个条件表达为:

SELECT . . .
FROM dbo.Team a JOIN
     dbo.Team b
     ON a.LeagueID = b.LeagueID AND a.TeamID <> b.TeamID
WHERE b.TeamAbbreviation = 'CHE' OR a.TeamAbbreviation = 'CHE';