Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Суммирование результатов подзопросов в Select-е  [new]
telerot
Member

Откуда:
Сообщений: 2
Есть 2 запроса
SELECT     Subcategory_1.Cost * Subcategory_1.Coefficient *
                          (SELECT     Coefficient * Cost AS Expr1
                            FROM          Subcategory
                            WHERE      (IDUser = @Parent) AND (Name LIKE Subcategory_1.Name)) * Category_1.Coefficient *
                          (SELECT     Coefficient AS Expr1
                            FROM          Category
                            WHERE      (IDUser = @UserId) AND (Name LIKE Category_1.Name)) AS value
FROM         Category AS Category_1 INNER JOIN
                      Subcategory AS Subcategory_1 ON Category_1.ID = Subcategory_1.Parent
WHERE     (Subcategory_1.IDUser = @UserId)

тут мы получаем путем перемножения 6 значений некоторое значение, которое нам нужно вычислить.

И есть второй запрос
SELECT     COUNT(*) AS countAction, CAST(FLOOR(CAST(Subcategory.Updated AS FLOAT)) AS DATETIME) AS data, 
                      SUM(Subcategory.Coefficient * Subcategory.Cost * Category.Coefficient) AS value
FROM         Subcategory INNER JOIN
                      Category ON Subcategory.Parent = Category.ID
WHERE     (Subcategory.IDUser = @UserID) AND (Subcategory.Updated >= @date) AND (Subcategory.Parent = @Parent)
GROUP BY CAST(FLOOR(CAST(Subcategory.Updated AS FLOAT)) AS DATETIME)

тут мы выбираем нужные строки по времени их добавления. и так же высчитываем значение путем перемножения 3-х значений и суммирования их для одного дне.

Суть в том что 3 значения во втором запросе, это не точные данные, нужно 6 значений как в пером запросе,
а банально сделать так
...
SUM(Subcategory_1.Cost * Subcategory_1.Coefficient *
    (SELECT     Coefficient * Cost AS Expr1
    FROM          Subcategory
    WHERE      (IDUser = @Parent) AND (Name LIKE Subcategory_1.Name)) * Category_1.Coefficient *
    (SELECT     Coefficient AS Expr1
    FROM          Category
    WHERE      (IDUser = @UserId) AND (Name LIKE Category_1.Name))) AS value
...

не получается ругается.
Подскажите способ как это реализовать.

P.S. Ответы переделать БД не принимаются = ))
10 июл 12, 12:37    [12843924]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование результатов подзопросов в Select-е  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
telerot,
SELECT SUM(F) FROM
(
 SELECT /*Тут какое-то числовое выражение*/
 FROM ...
 WHERE ...
) T(F)
....
10 июл 12, 12:59    [12844082]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование результатов подзопросов в Select-е  [new]
telerot
Member

Откуда:
Сообщений: 2
iap,

спасибо за ответ.
только видимо я не совсем корректно составил условия того, что мне нужно.

По сути благодаря вам, я навалял вот такую штуку
SELECT     COUNT(*) AS countAction, CAST(FLOOR(CAST(Subcategory_2.Updated AS FLOAT)) AS DATETIME) AS data,
                          (SELECT     SUM(F) AS Expr1
                            FROM          (SELECT     Subcategory_1.Cost * Subcategory_1.Coefficient *
                                                                               (SELECT     Coefficient * Cost AS Expr1
                                                                                 FROM          Subcategory
                                                                                 WHERE      (IDUser = @Parent) AND (Name LIKE Subcategory_1.Name)) * Category_1.Coefficient *
                                                                               (SELECT     Coefficient AS Expr1
                                                                                 FROM          Category
                                                                                 WHERE      (IDUser = @IDUser) AND (Name LIKE Category_1.Name)) AS Coefficient
                                                    FROM          Category AS Category_1 INNER JOIN
                                                                           Subcategory AS Subcategory_1 ON Category_1.ID = Subcategory_1.Parent
                                                    WHERE      (Subcategory_1.IDUser = @IDUser) AND (Subcategory_1.Updated >= @date) AND (Subcategory_1.Parent = @Parent)) AS T(F)) 
                      AS Expr1
FROM         Subcategory AS Subcategory_2 INNER JOIN
                      Category AS Category_2 ON Subcategory_2.Parent = Category_2.ID
WHERE     (Subcategory_2.IDUser = @IDUser) AND (Subcategory_2.Parent = @Parent) AND (Subcategory_2.Updated >= @date)
GROUP BY CAST(FLOOR(CAST(Subcategory_2.Updated AS FLOAT)) AS DATETIME)


Но тут косяк есть, если задать 1 день то считает все круто.
А если больше одного дня то сумму выдает за весь период, а надо по дням.

Я понимаю? что надо ограничить выборку "SELECT SUM(F)" но как я не знаю, подскажите пожалуйста.

В мне надо видеть сумму значений(а значения вычисляются перемножением коэффициентов) по дням.
10 июл 12, 16:55    [12846205]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить