I know there are various threads out there about this topic.
I am trying to create a query that returns a predefined groping of records and if there are not any results found I would like to return Zero. Most of the threads suggest we create a temporary table to house this grouping data but i will need to do it in a single statement. However we can make use of sub queries.
This was my original code...
and it returns the correct values but does not contain the groupings that do not have tickets:
SELECT SC.Service_Company_Code , SSPM.Mapping , COUNT(T.Service_Ticket_Id) AS 'Ticket_Count' FROM SV_Service_Ticket T INNER JOIN KS_SedonaSync_Problem SSP ON T.Sub_Problem_Id = SSP.Problem_Id RIGHT JOIN KS_SedonaSync_Problem_Sub_Mapping SSPM ON SSP.SedonaSync_Problem_Sub_Mapping_Id = SSPM.SedonaSync_Problem_Sub_Mapping_Id RIGHT JOIN SV_Service_Company SC ON T.Service_Company_Id = SC.Service_Company_Id WHERE SC.Vendor_Id = 1 AND SC.Inactive = 'N' AND SC.Service_Company_Id <> 1 AND SSPM.Inactive = 'N' AND T.Ticket_Status <> 'CL' GROUP BY SC.Service_Company_Code, SSPM.Mapping ORDER BY SC.Service_Company_Code, SSPM.Mapping My revised code...
now contains a sub query that does show the correct groupings and ran alone without linking in the Ticket table. But again when linked to the ticket table it does not show the grouping when there are no records present. The use of the left join is supposed to show me null records when they do not exist.
SELECT Q.Service_Company_Code , Q.Mapping , COUNT(T.Service_Ticket_Id) AS 'Ticket_Count' FROM (SELECT SC.Service_Company_Id, SC.Service_Company_Code, SSP.Problem_Id, SSPM.SedonaSync_Problem_Sub_Mapping_Id, SSPM.Mapping FROM SV_Service_Company SC FULL OUTER JOIN KS_SedonaSync_Problem_Sub_Mapping SSPM ON 1=1 LEFT JOIN KS_SedonaSync_Problem SSP ON SSPM.SedonaSync_Problem_Sub_Mapping_Id = SSP.SedonaSync_Problem_Sub_Mapping_Id WHERE SC.Vendor_Id = 1 AND SC.Inactive = 'N' AND SC.Service_Company_Id <> 1 AND SSPM.Inactive = 'N' ) Q LEFT JOIN SV_Service_Ticket T ON T.Sub_Problem_Id = Q.Problem_Id AND T.Service_Company_Id = Q.Service_Company_Id WHERE T.Ticket_Status <> 'CL' GROUP BY Q.Service_Company_Code, Q.Mapping ORDER BY Q.Service_Company_Code, Q.Mapping Any help is greatly welcomed, Thank you in advance.
Brad Swindell
EDIT: This is the current result set.

This is the desired result set.

EDIT: I have found a working solution thanks to Mike M!
SELECT SC.Service_Company_Code , SSPM.Mapping , COUNT(T.Service_Ticket_Id) AS 'Ticket_Count' FROM SV_Service_Company SC CROSS JOIN KS_SedonaSync_Problem SSP INNER JOIN KS_SedonaSync_Problem_Sub_Mapping SSPM ON SSP.SedonaSync_Problem_Sub_Mapping_Id = SSPM.SedonaSync_Problem_Sub_Mapping_Id AND SC.Vendor_Id = 1 AND SC.Inactive = 'N' AND SC.Service_Company_Id <> 1 LEFT JOIN SV_Service_Ticket T ON T.Sub_Problem_Id = SSP.Problem_Id AND T.Service_Company_Id = SC.Service_Company_Id AND T.Ticket_Status <> 'CL' WHERE SSPM.Inactive = 'N' GROUP BY SC.Service_Company_Code, SSPM.Mapping ORDER BY SC.Service_Company_Code, SSPM.Mapping
SV_Service_Tickettable that correspond to records fromQsubquery?