我有一個表格,用於保存每個帳戶的金融交易數據。如何獲取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]
此代碼不起作用,因爲,一些賬戶從來沒有支付,直到永遠。因此,有些帳戶在該領域根本沒有「PYMNT」代碼。他們有該領域的其他代碼,但該領域沒有PYMNT代碼。所以,當我爲該AcctID運行該代碼時,我只能得到標題和NO結果。
如何在該字段中爲該AcctID顯示'從未付費',以便我可以將其與另一個結果表一起加入?
什麼我最終想要得到的,通過與AcctID加入:
-----------------------------------------------------------------
|AcctID |ContactName|Phone Number |Email Address |Last Payment |
-----------------------------------------------------------------
|1234567 |John Doe |123-123-1234 |[email protected] |Never Paid |
-----------------------------------------------------------------
爲什麼您的樣本數據的值爲'從未付款',其中最後一筆付款是| 1234567 | PYMNT | 2017-09-01 |? –
您的查詢只包含來自一個表的元組,因此我假設其中只包含交易,因此它不能包含任何未付款的行。你可能希望'從finacct左加入fintransmaster使用(acctid)'(如果你的帳戶表稱爲finacct) – Jakumi