1

私はこのようなテーブルを持っています (ldate d, amt n(7), rdate d)。フィールドは、貸出日、金額、リリース日です。

ここでは、リリース日が空のレコードは保留中と見なされます。例えば、

SELECT SUM(AMT) FROM TABLE WHERE RDATE = {}

日付までの正味保留額を与える

特定の日付の保留額を計算する場合、レコードのリリース日が空の場合、または特定の日付より後にリリースされた場合、レコードは保留中と見なされます! したがって、{2011-10-09} の保留額を計算するには、クエリは次のとおりです。

SELECT SUM(AMT) FROM TABLE WHERE LDATE <= {2011-10-09} AND (RDATE > {2011-10-09} OR RDATE = {})

では、上の表から年間の保留額をどのように計算すればよいでしょうか。私が期待する結果は次のようになります。

Year    PendingAmt 
2009    1,15,000 
2010    1,38,000 
2011    1,71,000

注: 実際のテーブルには他にも多くのフィールドがあります。簡潔にするために、ここでは重要なフィールドのみについて言及しました。RDBMS は Microsoft Visual Foxpro 9.0 を使用

更新:サンプルデータを追加

CREATE TABLE VB(LDATE DATE, AMT NUMERIC(7), RDATE DATE);

INSERT INTO VB VALUES('2010-01-05', 12000, NULL);
INSERT INTO VB VALUES('2010-03-15', 25000, '2010-04-19');
INSERT INTO VB VALUES('2010-05-21', 31000, NULL);
INSERT INTO VB VALUES('2010-07-03', 58000, '2010-07-11');
INSERT INTO VB VALUES('2010-09-10', 47000, NULL);
INSERT INTO VB VALUES('2010-11-30', 63000, '2011-01-09');

INSERT INTO VB VALUES('2011-02-15', 21000, NULL);
INSERT INTO VB VALUES('2011-04-05', 52000, '2011-04-11');
INSERT INTO VB VALUES('2011-06-03', 13000, NULL);
INSERT INTO VB VALUES('2011-08-21', 85000, '2011-09-19');
INSERT INTO VB VALUES('2011-10-30', 74000, '2012-02-10');
INSERT INTO VB VALUES('2011-12-10', 36000, '2012-03-29');

INSERT INTO VB VALUES('2012-01-05', 15000, NULL);
INSERT INTO VB VALUES('2012-02-15', 25000, NULL);
INSERT INTO VB VALUES('2012-03-15', 35000, NULL);
INSERT INTO VB VALUES('2012-10-30', 30000, '2012-11-21');
INSERT INTO VB VALUES('2012-11-30', 31000, '2012-12-31');
INSERT INTO VB VALUES('2012-12-10', 12000, NULL);

ありがとう

4

2 に答える 2

1

更新:現在提供されているデータとそこに含まれる追加情報に基づいて (rDate が未払いのローンに対して空ではなく、null であるという事実のように、改善されたクエリは次のとおりです:

SELECT YEAR(ldate) yr, SUM(amt) pamt ; VBから; WHERE (rdate > DATE(YEAR(ldate),12,31) OR ISNULL(rdate)) ; GROUP BY yr ; INTO CURSOR 結果

これで得られる結果は次のとおりです。

2010 153000 2011 14400 2012 87000

あなたの問題に対する私の理解に基づいて、それは正しいです。

于 2012-07-23T20:46:24.780 に答える
0

最も簡単なのはユニオンです。

SELECT 2009 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2009-12-31} AND (RDATE > {2009-12-31} OR RDATE = {})
union all
SELECT 2010 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2010-12-31} AND (RDATE > {2010-12-31} OR RDATE = {})
union all
SELECT 2011 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2011-12-31} AND (RDATE > {2011-12-31} OR RDATE = {})
于 2012-07-23T01:06:17.420 に答える