根据我在下面的查询,我有几个问题:
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
目前查询显示以下结果:
这是不正确的,我需要帮助重构结果。我想要实现的是:
对于团队所玩的每场比赛(在此示例中为“CHE”),WeekNumber列需要更新以包含正确的一轮赛程。有多个团队,所以当所有团队玩1周时,它应显示WeekNumber'1',然后下一轮比赛应显示WeekNumber'2'等。
显示'CHE'对阵所有球队时,他们真的应该只对阵同一联赛的球队(因此a.LeagueID = b.LeagueID)。在屏幕截图中,它显示了团队与其他联赛(其他联盟ID)的其他球队比赛。
我需要更改才能使其正常工作?
期望的输出:
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
答案 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';