私は、アカウントごとに金融取引データを保持するテーブルを持っています。SQL Serverで値なしの行を取得する方法?
**FinTransMaster table:**
------------------------------------
|AcctID |FinTrnsCode|BusinessDay |
------------------------------------
|1234567 |INTRST |2017-09-09 |
------------------------------------
|1234567 |CHARGE |2017-09-08 |
------------------------------------
|1234567 |PYMNT |2017-09-01 |
------------------------------------
|1234567 |INTRST |2017-08-19 |
------------------------------------
|1234567 |INTRST |2017-08-09 |
------------------------------------
|1234567 |CHARGE |2017-08-04 |
------------------------------------
|1234567 |PYMNT |2017-08-01 |
------------------------------------
|1234567 |INTRST |2017-07-19 |
------------------------------------
各アカウントで前回の支払いが選択されました。次のように
だから私のコードは次のとおりです。
SELECT AcctID
,[FinTransCode]
--,MAX([BusinessDay]) --Tried this line, doesn't work
--,ISNULL(MAX([BusinessDay]), 'Never Paid') Last_Paid --Tried this line too, doesn't work
,CASE WHEN ISNULL(MAX([BusinessDay]), 0) = 0 THEN 'Never Paid'
ELSE MAX([BusinessDay])
END Last_Paid
FROM [GEB_DWH].[dbo].[FinTransMaster]
WHERE AcctID = '1234567'
AND FinTransTypeCode = 'PYMT'
GROUP BY AcctID,[FinTransTypeCode]
いくつかのアカウントがEVER、支払ったことがない、ので、このコードは動作しません。したがって、一部のアカウントには、そのフィールドには「PYMNT」コードがまったくありません。それらのフィールドには他のコードがありますが、そのフィールドにはPYMNTコードはありません。したがって、そのAcctIDのコードを実行すると、ヘッダと結果だけが得られます。
そのAcctIDのフィールドに「Never Paid」と表示されるので、別の結果テーブルに参加できますか?
私は最終的にAcctIDに参加することで、取得しようとしている:
-----------------------------------------------------------------
|AcctID |ContactName|Phone Number |Email Address |Last Payment |
-----------------------------------------------------------------
|1234567 |John Doe |123-123-1234 |[email protected] |Never Paid |
-----------------------------------------------------------------
実際に最後の支払いが| 1234567 | PYMNT | 2017-09-01 |であったサンプルデータには、 'Never Paid'という値が表示されるのはなぜですか? –
あなたのクエリは、1つのテーブルのタプルのみで構成されています。これは、トランザクションが含まれていると仮定しているため、決して支払わなかったアカウントの行は含まれません。 'from finacct left join fintransmaster using(acctid)'(アカウントテーブルの名前がfinacctの場合) – Jakumi