2013-11-26 5 views
0
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 

Он не видит CURRID внутри (SELECT SUM (TotalYearsAtService) FROM Правителя WHERE idRuler = CURRID)Как поставить SQL в SQL

+1

Вы должны добавить свои таблицы strucutures, чтобы увидеть, если мы можем помочь вам получить этот SUM и COUNT из основного запроса. –

+0

Ну, я нашел решение: я создал поле, которое является компьютером SQL. – Tigran

+0

Номер свойстваOfCoutries As% Integer [Calculated, SqlComputeCode = {set n = {idRuler} & sql (SELECT COUNT (DISTINCT IDstateddFK) INTO: данные FROM RulerToState WHERE IDrulerdFK =: n) set {NumberOfCoutries} = data}, SqlComputed]; – Tigran

ответ

3

CURRID является псевдонимом idrules AS CURRID, и в большинстве случаев вы не можете ссылаться на псевдонимы столбцов из внутренних запросов или в другие места, например group by. Хотя вы можете использовать псевдонимы таблиц, вы не можете использовать псевдонимы столбцов (в большинстве случаев) из одного и того же запроса. Это прежде всего потому, что SELECT происходит последним.

Вместо этого используйте idrules во внутреннем запросе вместо CURRID, использование псевдонимов таблиц дифференцировать внутреннюю и внешнюю Rule таблицу:

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 
+1

Ничего себе, как вы переформатировали * и * ответ в то время ?! В частности, не псевдонимы столбцов в запросе на одном уровне, просто в подзапросах под текущим уровнем. –

+0

Я не могу сделать idRuler = idRuler, он не делает смысла. Я хочу idRuler_outer_query = idRuler_inner_sum. Как это сделать??? – Tigran

+0

Я обновил. Внешний запрос может иметь псевдоним таблицы r1, а внутренний запрос - псевдоним таблицы r2 – AaronLS

Смежные вопросы