Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Ошибка в сложном запросе


Автор: uranpro 28.8.2008, 14:02
почему MS SQL 2000 ругается на этот запрос
Код

declare @Date varchar(40);
declare @Obj int;

select @Date='2008-08-22', @Obj= 18 ;

SELECT 
h.ID, h.TDate, h.DocNumber, h.Comments, SUM(t.RetailPrice * t.Quantity) AS Summ,
(

select Sum
    (
    (

    select TOP 1 RetailPrice
        from 
        T_Headers as H2 INNER JOIN
        T_Transactions as t2 ON h2.ID = t2.ID_Headers
            where 
            (t2.RetailPrice>0) and (h2.TDate<@Date) and (t2.ID_PLU = t1.ID_PLU) 

    )
    ) -- Показывает на это место !!!!
    from 
    t_headers as H1 inner join
    T_Transactions as t1 on h1.id = t1.id_headers
        where 
        h1.id = h.id;

) as OldSum
    FROM 
    T_Headers as h INNER JOIN
    T_Transactions as t ON h.ID = t.ID_Headers
        WHERE
        (h.ID_Moves = 7) AND (h.ID_Objects = @Obj) and
        (h.TDate BETWEEN CONVERT(DATETIME, 
         @Date+' 00:00:00', 102) AND CONVERT(DATETIME, @Date+' 23:59:59', 102))
            GROUP BY 
            h.ID, h.DocNumber, h.TDate, h.Comments


сообщение:
Msg 130, Level 15, State 1, Line 23
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.


в чем дело ?? подскажите плс))) !!! оч надо

Автор: uranpro 28.8.2008, 14:56
понял где ошибка, не могу ее исправить(( почему нельзя так писать
Код

declare @HeID int;
declare @Date datetime;

select @HeID = 1115212 , @Date = '2008-08-21' , @MSum = 0;


select Sum
    ((

    select TOP 1 RetailPrice
        from
        T_Headers as H2 INNER JOIN
        T_Transactions as t2 ON h2.ID = t2.ID_Headers
            where
            (t2.RetailPrice>0) and (h2.TDate<@Date) and (t2.ID_PLU = t1.ID_PLU)

    )) as Summ
    from
    t_headers as H1 inner join
    T_Transactions as t1 on h1.id = t1.id_headers
        where
        id = @HeID;


а так можно
Код

declare @HeID int;
declare @Date datetime;

declare @MSum money;

select @HeID = 1115212 , @Date = '2008-08-21' , @MSum = 0;


select @MSum = @MSum +
    (

    select TOP 1 RetailPrice
        from 
        T_Headers as H2 INNER JOIN
        T_Transactions as t2 ON h2.ID = t2.ID_Headers
            where 
            (t2.RetailPrice>0) and (h2.TDate<@Date) and (t2.ID_PLU = t1.ID_PLU)

    )
    from 
    t_headers as H1 inner join
    T_Transactions as t1 on h1.id = t1.id_headers
        where 
        id = @HeID;

select @MSum as SumM ;


как бы это все нормально сделать

Автор: DigitalDummy 5.10.2008, 16:51
У тебя написано внизу (где можно):
Код

SELECT @MSum = @MSum +
-- бла-бла


А вверху (где ругает):
Код

SELECT Sum
(
  -- тут отдельная операция
)


То есть ты пытаешься совместить Sum и результат операции, а никакого оператора между ними нет.
Может в этом проблема?
(Я не особо опытный в SQL. Только предполагаю и это первое, что пришло в голову.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)