select demvbtn, deomsch, (select count(*) from drmvctl a, drmvtbg b where a.deblgty = b.demvbtn and a.deblgty = :demvbtn) as counter, case when counter > 0 then 'u' else '' end ctrl from drmvtbg where demvbtn = :demvbtn
4 Réponses :
L'alias counter
n'est pas disponible pour une utilisation dans la clause select
de même niveau, car lorsque cette sélection est évaluée, le compteur
n'a pas été calculé. Une solution ici consiste à utiliser un CTE qui calcule d'abord le terme d'alias counter
:
with cte as ( select demvbtn, deomsch, (select count(*) from drmvctl a inner join drmvtbg b on a.deblgty = b.demvbtn where a.deblgty = :demvbtn) as counter from drmvtbg where demvbtn = :demvbtn ) select demvbtn, deomsch, counter, case when counter > 0 then 'u' else '' end ctrl from cte;
Notez que j'ai également supprimé votre jointure de virgule de style old school avec un intérieur explicite moderne joindre. C'est la manière préférée d'écrire une jointure de nos jours.
utiliser la sous-requête comme alias de colonne ne fonctionne pas dans le même select
select *, case when counter > 0 then 'u' else '' end ctrl from ( select demvbtn, deomsch, (select count(*) from drmvctl a join drmvtbg b on a.deblgty = b.demvbtn where a.deblgty = :demvbtn) as counter from drmvtbg where demvbtn = :demvbtn )A
L'alias en ligne ne prend pas en charge dans la sous-requête Oracle Use
select emvbtn, deomsch,case when counter > 0 then 'u' else '' end ctrl from (select demvbtn, deomsch, (select count(*) from drmvctl a join drmvtbg b on a.deblgty = b.demvbtn where a.deblgty = :demvbtn) as counter from drmvtbg where demvbtn = :demvbtn ) t
Je suppose que vous voulez:
select demvbtn, deomsch, counter, (case when counter > 0 then 'u' end) as ctrl from (select dt.demvbtn, dt.deomsch, (select count(*) from drmvctl dc where dc.deblgty = dt.demvbtn and dc.deblgty = dt.demvbtn ) as counter from drmvtbg dt where dt.demvbtn = :demvbtn ) d;
Remarques:
FROM
. JOIN
. else
n'est pas nécessaire pour l'expression case
.
C'est ainsi que fonctionne SQL. Vous ne pouvez pas réutiliser un alias de colonne dans le même
select
. Vous devez utiliser une sous-requête, un CTE ou une jointure latérale.