SQL - разные уровни суммы в одном выделении с предложением where - PullRequest
0 голосов
/ 28 марта 2011

У меня есть 2 таблицы.У каждого есть оригинальное количество, которое остается статическим.Во второй таблице приведен список частичных сумм, примененных с течением времени к первоначальной сумме в первой таблице.

Таблицы БД:

***memotable***
ID [primary, unique]
Amount (Orginal Amount)

***transtable***
ID [many IDs in transtable to single ID in memotable] 
AmountUsed (amount applied)
ApplyDate (date applied)

Я хотел бы найти в одном выборе:идентификатор, сумма, использованная с прошлой недели (ApplyDate> 2011-04-21), сумма, использованная к дате.

Единственные строки, которые должны появиться в результате, - это когда сумма использовалась с прошлой недели (ApplyDate> 2011-04-21).

Я застрял при попытке получить сумму для суммы, использованной на сегодняшний день, поскольку в нее необходимо включить значения AmountUsed, которые выходят за пределы, когда ApplyDate> 2011-04-21.

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

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

SELECT
  ID,
  AmountUsedSinceLastWeek = SUM(CASE WHEN ApplyDate > '4/21/2011' THEN AmountUsed END)
  AmountUsedToDate = SUM(AmountUsed)
FROM TransTable
GROUP BY ID
1 голос
/ 28 марта 2011

Поскольку вы хотите ограничить его строками, которые произошли с прошлой недели, но также хотите включить итоговую сумму на дату, я думаю, что наиболее эффективным методом будет использование подвыборов ...

SELECT
    lastWeek.ID,
    lastWeek.AmountUsedSinceLastWeek,
    toDate.AmountUsedToDate
FROM
(
    SELECT
        ID,
        SUM(AmountUsed) AS AmountUsedSinceLastWeek
    FROM TransTable
    WHERE ApplyDate > '4/21/2011'
    GROUP BY ID
) lastWeek JOIN
(
    SELECT
        ID,
        SUM(AmountUsed) AS AmountUsedToDate
    FROM TransTable
    GROUP BY ID
) toDate ON lastWeek.ID = toDate.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...