Суммировать результат запроса SQL Server - PullRequest
0 голосов
/ 11 апреля 2019

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

На изображении результат первого запроса. Теперь мне нужно добавить этот результат и сгруппировать по дате

Example in Image

Пример: 200 + 200 + 199 + 199 + 199 + 200 .... = результат

мой код:

 SELECT SUM (
(SELECT 
    [DATA],
    IIF((
            Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER (ORDER BY Icas.COD_ICAS), 0)) > 0 
            AND (Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER ( ORDER BY Icas.COD_ICAS),0)) < 500, 
            (Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER (ORDER BY Icas.COD_ICAS), 0)), 0) AS DifL1
    FROM VW_ICAS Icas )) AS Res
FROM
    VW_ICAS
GROUP BY
    [DATA]

Result of my query

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Я полагаю, что этот запрос дает данные, которые вы предоставляете в своем изображении:

SELECT [DATA], IIF(...) AS DifL1
FROM VW_ICAS Icas

(я обрезал выражение для DifL1 для ясности.)

И вы хотите сделать этос этими данными:

SELECT [DATA], SUM(DifL1)
FROM [the result above]
GROUP BY [DATA]

Вы можете поместить первый запрос во второй как табличное выражение:

SELECT [DATA], SUM(DifL1)
FROM (SELECT [DATA], IIF(...) AS DifL1
      FROM VW_ICAS Icas) AS X
GROUP BY [DATA]

Это должно работать, я думаю.

Это вариант второго запроса ответа @ LuisCazares, но с группировкой по полю [DATA].

0 голосов
/ 11 апреля 2019

Вы агрегируете по столбцам, а не по результатам.Ваше решение может пойти 2 разными путями.Одним из них является агрегирование данных DATA

SELECT 
    [DATA],
    SUM (IIF((
            Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER (ORDER BY Icas.COD_ICAS), 0)) > 0 
            AND (Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER ( ORDER BY Icas.COD_ICAS),0)) < 500, 
            (Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER (ORDER BY Icas.COD_ICAS), 0)), 0)) AS DifL1
FROM VW_ICAS Icas 
GROUP BY [DATA];

. Или вы можете просто получить сумму всех строк в наборе результатов, преобразовав ее в производную таблицу, но по-прежнему ссылаясь на столбец.

SELECT SUM(DifL1) AS SUMDifL1
FROM(
    SELECT 
        [DATA],
        IIF((
                Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER (ORDER BY Icas.COD_ICAS), 0)) > 0 
                AND (Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER ( ORDER BY Icas.COD_ICAS),0)) < 500, 
                (Icas.CONTADOR_ICAS_1 - COALESCE(LAG(Icas.CONTADOR_ICAS_1) OVER (ORDER BY Icas.COD_ICAS), 0)), 0) AS DifL1
    FROM VW_ICAS Icas )x;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...