Valeur de sélection SQL si la condition de la même table est remplie

Sep 11 2020

Je cherche à obtenir des valeurs d'une table lorsqu'une valeur est présente, sinon avoir NULL (ou un espace réservé) à la place. Comment puis-je faire ceci?

Les tableaux ressemblent à ceci:

Élèves
| ID | Prénom | Nom |
| ---- | ----------- | ---------- |
| 1 | John | Doe |
| 2 | Jane | Frost |
| 3 | Rob | Smith |
ÉtudeAnnée
| ID | StartDate | EndDate | CurrentYear |
| ---- | ------------------------- | ------------------ ------- | ----------- |
| 1 | 01/09/2018 00: 00: 00.000 | 2019-08-31 00: 00: 00.000 | Year1 |
| 1 | 01/09/2019 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 |

Mon résultat souhaité est le suivant:

| ID | Prénom | Nom | CurrentYear |
| ---- | ----------- | ---------- | ----------- |
| 1 | John | Doe | Year3 |
| 2 | Jane | Frost | NULL |
| 3 | Rob | Smith | Year1 |
| | | | |

J'ai essayé plusieurs choses avec un CASE:

(
    CASE
        WHEN (
            YEAR(StudyYear.CurrentYear) = '2020'
        ) THEN (SELECT StudyYear WHERE YEAR(StudyYear.CurrentYear) = '2020')
        ELSE (NULL)
    END
) AS CurrentYear

Mais cela filtre les entrées qui n'apparaissent pas dans le tableau studyyear. Ne pas faire de cas renvoie également tous les résultats de l'autre table.

Réponses

1 DhruvJoshi Sep 11 2020 at 14:27

Utilisation de OUTER APPLY

SELECT 
 S.*, O.CurrentYear 

FROM Students S
OUTER APPLY 
( 
SELECT CurrentYear FOM StudyYear SY
WHERE SY.ID=S.ID AND
YEAR(StartDate)=2020
)O
1 Fahmi Sep 11 2020 at 14:25

Vous pouvez essayer ci-dessous -

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
1 ZaynulAbadinTuhin Sep 11 2020 at 14:26

utiliser la sous-requête et rejoindre

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