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.