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

1/6/09のgift_dateの行のID#1、ギフトの日付2/10/09のID#2、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

通常、これはビューによって行われます(Model-View-Controllerのように)。ほとんどの場合、これは、データがロードされるときではなく、グループ化機能を備えたグリッドコントロールになります。次に、上記のようにデータベースからデータをロードし、グループ化されたデータを表示するようにビューを構成します。

于 2009-08-10T16:26:15.937 に答える
0

これがまったく役立つかどうかを確認してください。

http://www.databasejournal.com/features/mssql/article.php/3112381/SQL-Server-Calculating-Running-Totals-Subtotals-and-Grand-Total-Without-a-Cursor.htm

于 2009-08-10T16:17:20.167 に答える
0

SQL Server バージョン 2005 以降の場合、フラグ列のみが必要な場合は、以下のクエリを使用します

--これがあなたのテーブルだとします
DECLARE @Table TABLE
(
    ID int,gift_date datetime,gift_amt int
)
@テーブルに挿入
SELECT 1,'1/6/09',500 UNION ALL
SELECT 2,'1/9/09',200 UNION ALL
SELECT 2,'1/15/09',65 UNION ALL
SELECT 3,'1/26/09',140 UNION ALL
SELECT 2,'2/10/09',600 UNION ALL
SELECT 3,'3/7/09',200

; CTE を使用
(
    SELECT ID,gift_date,gift_amt,
    SUM(gift_amt)OVER(PARTITION BY ID) As TotalSum
    FROM @テーブル
)
SELECT ID,gift_date,gift_amt,
CASE WHEN TotalSum>500 の場合 1 それ以外の場合 0 フラグとして終了
CTEから
于 2011-07-06T12:26:26.490 に答える