I have the following Loans table:
EmployeeId LoanCatId LoanSubCatId LoanDate
------------------------------------------------
1 4 1 19990125
3 3 2 20101210
6 1 1 19910224
4 4 2 20120219
1 3 1 19920214
2 4 2 19930614
1 3 2 19840705
6 1 1 20030917
5 1 1 19900204
3 1 2 20181113
where the fields EmployeeId, LoanCatId, and LoanSubCatId reference the ID of the following tables, as foreign keys, respectively:
Table Employees:
EmployeeId Name
------------------
1 John
2 Jack
3 Alex
4 Fred
5 Danny
6 Russel
Table LoanCategories:
CategoryId CategoryName
------------------------
1 CA
2 CB
3 CC
4 CD
Table LoanSubCategories:
CategoryId CategoryName
------------------------
1 SCA
2 SCB
I'm trying to get the following table by specifying a LoanDate for example, '19990125' (the first row in the Loans table):
CategoryName SubCategoryName Count
-------------------------------------
CA SCA 0
CA SCB 0
CB SCA 0
CB SCB 0
CC SCA 0
CC SCB 0
CD SCA 1
CD SCB 0
The database is SQLite.
Thanks in advance.
You need a CROSS join of LoanCategories and LoanSubCategories to get all the combinations of categories and subcategories and a LEFT join to Loans for the specific date that you want.
Finally, you must aggregate for each category/subcategory:
SELECT c.CategoryName,
s.CategoryName AS SubCategoryName,
COUNT(l.LoanDate) AS Count
FROM LoanCategories c CROSS JOIN LoanSubCategories s
LEFT JOIN Loans l ON l.LoanCatId = c.CategoryId AND l.LoanSubCatId = s.CategoryId AND l.LoanDate = '19990125'
GROUP BY c.CategoryId, s.CategoryId;
See the demo.