[英]SQL: update a field with a value from the same table, only if condition is met
[英]SQL select value if condition in same table is met
我希望在存在值時從表中獲取值,否則使用 NULL(或占位符)。 我怎樣才能做到這一點?
表格如下所示:
Students | ID | Firstname | Lastname | |----|-----------|----------| | 1 | John | Doe | | 2 | Jane | Frost | | 3 | Rob | Smith |
StudyYear | ID | StartDate | EndDate |CurrentYear| |----|-------------------------|-------------------------|-----------| | 1 | 2018-09-01 00:00:00.000 | 2019-08-31 00:00:00.000 | Year1 | | 1 | 2019-09-01 00:00:00.000 | 2020-08-31 00:00:00.000 | Year2 | | 1 | 2020-09-01 00:00:00.000 | 2021-08-31 00:00:00.000 | Year3 | | 3 | 2020-09-01 00:00:00.000 | 2021-08-31 00:00:00.000 | Year1 |
我想要的結果是這樣的:
| ID | Firstname | Lastname |CurrentYear| |----|-----------|----------|-----------| | 1 | John | Doe | Year3 | | 2 | Jane | Frost | NULL | | 3 | Rob | Smith | Year1 | | | | | |
我用 CASE 嘗試了幾件事:
(
CASE
WHEN (
YEAR(StudyYear.CurrentYear) = '2020'
) THEN (SELECT StudyYear WHERE YEAR(StudyYear.CurrentYear) = '2020')
ELSE (NULL)
END
) AS CurrentYear
但這會過濾掉沒有出現在 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 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.