SQL - 使用where子句选择一个中的不同总和级别

时间:2011-03-28 16:48:27

标签: sql select sum

我有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)

我想在一个选项中找到自上周以来使用的ID,金额(ApplyDate> 2011-04-21),用于约会的金额。

结果中应该出现的唯一行是自上周开始使用金额时(ApplyDate> 2011-04-21)。

我一直试图获得迄今为止所用金额的总和,因为这需要包括在ApplyDate>之外的AmountUsed值。 2011-04-21

2 个答案:

答案 0 :(得分:2)

在这种情况下可以避免子选择:

SELECT
  ID,
  AmountUsedSinceLastWeek = SUM(CASE WHEN ApplyDate > '4/21/2011' THEN AmountUsed END)
  AmountUsedToDate = SUM(AmountUsed)
FROM TransTable
GROUP BY ID

答案 1 :(得分:1)

由于您希望将其限制为自上周以来发生的行,但又想包括迄今为止的总数,我认为最有效的方法是使用子选择......

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