Tsql 如何选择一个表中的所有行以及另一个表中的任何匹配项(如果存在)?

Tsql 如何选择一个表中的所有行以及另一个表中的任何匹配项(如果存在)?,tsql,select,case,Tsql,Select,Case,我有一个数据库,包含2个表、团队和玩家: Teams: TeamID | TeamName ------------------ |1 | Team A | |2 | Team B | |3 | Team C | ------------------ Players: PlayerID | Name | TeamID | Position ---------------------------------------

我有一个数据库,包含2个表、团队和玩家:

Teams:             

TeamID  | TeamName 
------------------ 
|1      | Team A |
|2      | Team B |
|3      | Team C |
------------------

Players:

PlayerID  | Name      | TeamID | Position
------------------------------------------ 
|1        | Anthony J | 1      | Guard   |
|2        | Sam K     | 2      | Guard   |
|3        | Jack P    | 2      | Forward |
|4        | Carlos B  | 2      | Forward |
------------------------------------------
我希望为数据库中所有球队的名字选择一列,不管他们是否有球员。如果其位置为“前进”,则下一列应显示其名称,否则为空。球队中的每个“前锋”球员都应该有一排

我用于获取此数据的查询是:

SELECT T.TeamName,

CASE WHEN P.Position = 'Forward'
    THEN P.Name
END as ForwardPlayer

FROM Teams T
LEFT JOIN Players P on T.TeamID = P.TeamID
我需要的所有数据都驻留在此数据集中,但对于具有转发的团队,有一行为NULL,即:

TeamName  | ForwardPlayer
-------------------------
|Team A   | NULL        |
|Team B   | Jack B      |
|Team B   | Carlos B    |
|Team B   | NULL        |
|Team C   | NULL        |
我意识到第四排的存在是因为球队中有一名球员不符合案例条件,所以结果为空

在外部查询中加入where子句,将数据集限制为“前锋”球员,将忽略没有任何前锋球员的所有球队。我需要所有团队的名字都出现在数据集中

仅当每个团队有1个前卫时,使用嵌套选择来获取此选项才有效


对于有符合此条件的球员的球队,有没有办法省略这些空行?

不做
案例
。您只需要直接将玩家限制为仅向前的玩家,然后执行
加入

SELECT T.TeamName, P.Name
FROM Teams T
LEFT JOIN Players P ON T.TeamID = P.TeamID
  AND P.Position = 'Forward'

杰出的我知道要让它工作起来不会特别复杂。非常感谢,这正是我所需要的。