Reputation: 1057
select
idRuler AS CURRID,
beginDate,
endDate,
(SELECT SUM(TotalYearsAtService)
FROM Ruler WHERE idRuler=CURRID
) AS PeriodTotal,
(SELECT COUNT(DISTINCT IDstateddFK)),
nameRuler AS Name
FROM Ruler, Position, RulerToState
where Ruler.idRuler=IDrulerFK
and RulerToState.IDrulerdFK=Ruler.idRuler
GROUP BY nameRuler
It does not see CURRID inside (SELECT SUM(TotalYearsAtService) FROM Ruler WHERE idRuler=CURRID )
Upvotes: 0
Views: 179
Reputation: 38384
CURRID is an alias idrules AS CURRID
, and in most cases you can't reference column aliases from inner queries or other places like group by's. While you can use table aliases, you can't use column aliases(in most cases) from within the same query. This is primarily because the SELECT happens last.
Instead, use idrules in the inner query instead of CURRID, use table aliases to differentiate the inner and outer Rule table:
SELECT
idRuler,
beginDate,
endDate,
(SELECT SUM(TotalYearsAtService)
FROM Ruler r2 WHERE r1.idRuler = r2.idRuler
) AS PeriodTotal,
(SELECT COUNT(DISTINCT IDstateddFK)),
nameRuler AS Name
FROM
Ruler r1, Position, RulerToState
WHERE
Ruler.idRuler = IDrulerFK
AND RulerToState.IDrulerdFK = Ruler.idRuler
GROUP BY
nameRuler
Upvotes: 3