テーブルFとテーブルDの2つのテーブルがあります。
表Fは、アカウントの金融取引(支払い、通行料、利息)の詳細を示しています。表Dは、延滞状況を示しています(ユーザーが支払いをしていない場合)。さまざまなステータスコードが表示されます。0、1、2、11(異なる意味)。
私のテーブル構造は次のとおりです。
Table F
============
-------------------------------------------
|AccountId|TypeCode |BusinessDate|TransAmt|
-------------------------------------------
|12345 | PYMT |2016-06-22 | 10.54|
-------------------------------------------
|12345 | TOLL |2016-06-15 | 04.00|
-------------------------------------------
|12345 | INTR |2016-05-26 | 01.66|
-------------------------------------------
|12345 | TOLL |2016-04-10 | 04.00|
-------------------------------------------
Table D
==========
-----------------------------------------------
|AccountId|FromID|ToID|CreatedDate |
-----------------------------------------------
|12345 | 0| 2|2016-12-25 00:12:44.453|
-----------------------------------------------
|12345 | 2| 1|2017-04-02 07:16:46.770|
-----------------------------------------------
|12345 | 1| 11|2017-07-12 16:16:36.747|
-----------------------------------------------
アカウントがステータスコード11(ToID)になった後、アカウントで行われたすべての支払いの合計を見つけるためにコードを実行しようとしています
私のコード:
SELECT F.AccounttID
,ISNULL(SUM(TransAmt), 0) Payments
FROM F INNER JOIN D ON F.AccounttID = D.AccountId
WHERE AccountId = 12345
AND TypeCode = 'PYMT'
AND F.BusinessDate >= D.CreatedDate
AND ToID = 11
--AND F.BusinessDate >= (SELECT CreatedDate FROM D WHERE F.AccounttID = D.AccountId AND ToID = 11)
GROUP BY F.AccountID, F.TypeCode
私が得ている結果は次のとおりです。
--------------------
|AccountID|Payments|
--------------------
| | |
--------------------
私が望む結果は次のとおりです。
--------------------
|AccountID|Payments|
--------------------
| 12345| 0.00|
--------------------
問題は、where
基準に一致する結果がないことです。あなたは実際に使用しようとしていると思いますconditional aggregation
。outer join
一致するものがない場合に備えて、inも使用しました。
SELECT F.AccounttID
,SUM(CASE WHEN F.BusinessDate >= D.CreatedDate THEN F.TransAmt ELSE 0 END) Payments
FROM F
LEFT JOIN D ON F.AccounttID = D.AccountId AND D.ToId = 11
WHERE F.AccountId = 12345
AND F.TypeCode = 'PYMT'
GROUP BY F.AccountID
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加