【问题标题】:Adding another column to an existing table with JOIN, also using CASE使用 JOIN 向现有表添加另一列,也使用 CASE
【发布时间】:2016-06-05 06:03:54
【问题描述】:

好的,我有这个查询,它可以工作:

SELECT games.week, local_team, games.local_goals, visitor_team, games.visitor_goals, winner1
FROM games
JOIN (SELECT local_team = teams.team_name, team_number FROM teams) AS local_team ON games.team_number_loc = local_team.team_number
JOIN (SELECT visitor_team = teams.team_name, team_number FROM teams) AS visitor_team ON games.team_number_vis = visitor_team.team_number
JOIN (
SELECT CASE
WHEN games.local_goals < games.visitor_goals
THEN games.team_number_vis
WHEN games.local_goals > games.visitor_goals
THEN games.team_number_loc
WHEN games.local_goals = games.visitor_goals
THEN null
END AS winner1,
game_number
FROM games)
AS winner1 ON games.game_number = winner1.game_number

但是我需要为赢得比赛的球队的名称添加一列,我在想这样的事情应该这样做:

SELECT games.week, local_team, games.local_goals, visitor_team, games.visitor_goals, winner1, winner2
FROM games
JOIN (SELECT local_team = teams.team_name, team_number FROM teams) AS local_team ON games.team_number_loc = local_team.team_number
JOIN (SELECT visitor_team = teams.team_name, team_number FROM teams) AS visitor_team ON games.team_number_vis = visitor_team.team_number
JOIN (
SELECT CASE
WHEN games.local_goals < games.visitor_goals
THEN games.team_number_vis
WHEN games.local_goals > games.visitor_goals
THEN games.team_number_loc
WHEN games.local_goals = games.visitor_goals
THEN null
END AS winner1,
game_number
FROM games)
AS winner1 ON games.game_number = winner1.game_number
JOIN
(SELECT CASE
WHEN winner1 = teams.team_number
THEN teams.team_name
WHEN winner1 is null
THEN 'no winner'
END AS winner2,
teams.team_number
FROM teams) AS winner2 ON winner2.team_number = winner1

但是当我尝试我得到这个错误时:

消息 207,第 16 级,状态 1,第 153 行 列名“winner1”无效。

消息 207,第 16 级,状态 1,第 155 行 列名“winner1”无效。

我希望的输出与另一段代码完全相同,只是添加了获胜团队名称的列。

【问题讨论】:

  • game_number是表games的PK吗?
  • 不是,我只是添加了它,这样我才能使第一个查询工作

标签: sql sql-server database select join


【解决方案1】:

您不能在其他子查询中使用您在上一个子查询中尝试执行的计算列。

您可以尝试以下查询:-

SELECT games.week, local_team, games.local_goals, visitor_team, games.visitor_goals, winner1, winner2 = ISNULL(T.team_name, 'No Winner')
FROM games
JOIN (SELECT local_team = teams.team_name, team_number FROM teams) AS local_team ON games.team_number_loc = local_team.team_number
JOIN (SELECT visitor_team = teams.team_name, team_number FROM teams) AS visitor_team ON games.team_number_vis = visitor_team.team_number
JOIN (
SELECT CASE
WHEN games.local_goals < games.visitor_goals
THEN games.team_number_vis
WHEN games.local_goals > games.visitor_goals
THEN games.team_number_loc
WHEN games.local_goals = games.visitor_goals
THEN null
END AS winner1,
game_number
FROM games)
AS winner1 ON games.game_number = winner1.game_number
LEFT JOIN
teams T ON T.team_number = winner1.winner1

【讨论】:

  • 非常感谢,这正是我所希望的结果!
猜你喜欢
  • 2023-04-04
  • 2022-09-27
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多