如果满足同一表中的条件,则SQL选择值

如果满足同一表中的条件,则SQL选择值,sql,sql-server,join,case,Sql,Sql Server,Join,Case,我希望在存在值时从表中获取值,否则使用NULL(或占位符)。 我该怎么做 这些表如下所示: Students | ID | Firstname | Lastname | |----|-----------|----------| | 1 | John | Doe | | 2 | Jane | Frost | | 3 | Rob | Smith | 但这会过滤掉studyyear表中未出现的条目。 不执行案例也会返回其他表中的所有结果。您

我希望在存在值时从表中获取值,否则使用NULL(或占位符)。 我该怎么做

这些表如下所示:

Students | ID | Firstname | Lastname | |----|-----------|----------| | 1 | John | Doe | | 2 | Jane | Frost | | 3 | Rob | Smith | 但这会过滤掉studyyear表中未出现的条目。
不执行案例也会返回其他表中的所有结果。

您可以尝试以下方法-

select id, Firstname,Lastname,currentyear
from Students s left join StudyYear s1
on s.id=s1.id and YEAR(startdate)=2020 and year(enddate)>=2020

你可以试试下面的方法-

select id, Firstname,Lastname,currentyear
from Students s left join StudyYear s1
on s.id=s1.id and YEAR(startdate)=2020 and year(enddate)>=2020
使用子查询和联接

select a.id,a.firstname,a.lastname,CurrentYear
 from students a left join
(
select *,row_number()(over partition by id order by EndDate desc)
rn from studyyear
) b on a.id=b.id
 where a.rn=1
使用子查询和联接

select a.id,a.firstname,a.lastname,CurrentYear
 from students a left join
(
select *,row_number()(over partition by id order by EndDate desc)
rn from studyyear
) b on a.id=b.id
 where a.rn=1
使用外部应用程序

SELECT 
 S.*, O.CurrentYear 

FROM Students S
OUTER APPLY 
( 
SELECT CurrentYear FOM StudyYear SY
WHERE SY.ID=S.ID AND
YEAR(StartDate)=2020
)O
使用外部应用程序

SELECT 
 S.*, O.CurrentYear 

FROM Students S
OUTER APPLY 
( 
SELECT CurrentYear FOM StudyYear SY
WHERE SY.ID=S.ID AND
YEAR(StartDate)=2020
)O

这正是我想要的。谢谢您!这正是我想要的。谢谢您!