1

我正在尝试创建一个查询来汇总某个人给予的总礼物,但是当总捐赠达到 500 美元时,在个人礼物上添加一个标志(我不需要总和)。

我有人员 ID、礼物大小和礼物日期。例如:

ID           gift_date       gift_amt
---------    -----------     --------------  
1            1/6/09          500
2            1/9/09          200
2            1/15/09         65
3            1/26/09         140
2            2/10/09         600
3            3/7/09          200

我希望在我的查询中显示一个标志,其中 ID#1 的礼物日期为 1/6/09,ID#2 的礼物日期为 2009 年 2 月 10 日,ID#3 没有标志。

4

4 回答 4

1

OraclePostgreSQL 8.4

SELECT  q.*, CASE WHEN psum > 500 THEN 1 ELSE 0 END AS flag
FROM    (
        SELECT  gd.*, SUM(gift_amt) OVER (PARTITION BY id ORDER BY gift_date) AS psum
        FROM    gift_date gd
        ) q
WHERE   psum <= 500 - gift_amt
于 2009-08-10T16:25:32.303 回答
1

通常这将由 View 完成(如在Model-View-Controller中)。大多数情况下,这将是具有分组功能的网格控件,而不是在加载数据时。然后,您将从数据库中加载数据,如上所示,并配置视图以显示分组数据。

于 2009-08-10T16:26:15.937 回答
0

对于 SQL Server 版本 2005+,如果您只需要标志列,请使用以下查询

--假设这是你的桌子
声明 @Table 表
(
    ID int,gift_date 日期时间,gift_amt int
)
插入@表
选择 1,'1/6/09',500 联合所有
选择 2,'1/9/09',200 联合所有
选择 2,'1/15/09',65 联合所有
选择 3,'1/26/09',140 联合所有
选择 2,'2/10/09',600 联合所有
选择 3,'3/7/09',200

;与 CTE 作为
(
    选择 ID,gift_date,gift_amt,
    SUM(gift_amt)OVER(PARTITION BY ID) 作为 TotalSum
    来自@表
)
选择 ID,gift_date,gift_amt,
CASE WHEN TotalSum>500 then 1 else 0 end as Flag
来自 CTE
于 2011-07-06T12:26:26.490 回答