簡體   English   中英

如果滿足同一表中的條件,則 SQL 選擇值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM