不在查询中显示某些行的SQL逻辑
我一直在寻找如何在SQL查询中应用逻辑来实现我的目标。在这一点上,我愿意接受任何建议 我有两个表,它们之间有一个内部连接。这两个表格是所有MLB棒球运动员(过去和现在)的完整列表,以及所有名人堂球员的表格。我期待着拿出一个查询结果,每行一个唯一的球员,并有一个列填写一个Y或N,如果他们在名人堂 表1-球员不在查询中显示某些行的SQL逻辑,sql,logic,Sql,Logic,我一直在寻找如何在SQL查询中应用逻辑来实现我的目标。在这一点上,我愿意接受任何建议 我有两个表,它们之间有一个内部连接。这两个表格是所有MLB棒球运动员(过去和现在)的完整列表,以及所有名人堂球员的表格。我期待着拿出一个查询结果,每行一个唯一的球员,并有一个列填写一个Y或N,如果他们在名人堂 表1-球员 ID HallofFameID NameFirst NameLast 表2-Halloff名称 HallofFameID YearID Votes Inducted 每个玩家在玩家表中有一
ID
HallofFameID
NameFirst
NameLast
表2-Halloff名称
HallofFameID
YearID
Votes
Inducted
每个玩家在玩家表中有一个条目,但可能会在名人堂表中多次输入玩家ID。在我的带有内部联接的查询结果中,将拉出如下所示的行
Player ID | NameFirst | NameLast | YearID | Votes | Inducted
001........| Don.........| Sutton......| 1992.....| 100.....| N
001........| Don.........| Sutton......| 1993.....| 89......| N
001........| Don.........| Sutton......| 1994.....| 100.....| N
001........| Don.........| Sutton......| 1998.....| 341.....| Y
002........| Mickey......| Mantle......| 1974.....| 341.....| Y So forth...
我希望我的查询结果不显示1992-1997年Don Sutton未当选的行,而只显示1998年,然后向下移动到Mickey Mantle行,显示Y。还有其他未当选的玩家,他们的名字旁边有一个N,我需要在同一个查询结果上显示他们的霍尔资格多年
我已经包括了我的工作SQL以供参考。我不是在找人来编写我的SQL,而是用我可能缺少的关键字或逻辑来为我指明正确的方向。
提前谢谢
Select DISTINCT
Master.namefirst,
Master.nameLast,
Master.HofID,
HallOfFame.inducted,
HallOfFame.yearid
FROM
HallOfFame
INNER JOIN
Master On HallOfFame.hofID = Master.hofID
Group by
Master.nameFirst,
Master.nameLast,
Master.PlayerID,
Master.hofID,
HallOfFame.inducted,
HallOfFame.yearid*
请尝试以下方法:
SELECT
m.namefirst,
m.nameLast,
m.HallofFameID,
h1.inducted,
h1.yearid
FROM HallOfFame h1
INNER JOIN
(
SELECT PlayerID, MAX(YearID) LatestYear
FROM HallOfFame
GROUP BY PlayerID
) h2 ON h1.PlayerID = h2.PlayerID AND h1.YearID = h2.LatestYear
INNER JOIN players m On h1.PlayerId = m.Id;
这将为您提供:
| NAMEFIRST | NAMELAST | HALLOFFAMEID | INDUCTED | YEARID |
-----------------------------------------------------------
| Don | Sutton | 1 | Y | 1998 |
| Mickey | Mantle | 2 | Y | 1974 |
你能提供表格的完整结构吗(以一种我不需要手工就能运行和创建的格式)?谢谢。查询的结构运行良好,为此我对行名称做了一些更改。成功了。