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