DealerCode ForecastId ForecastId Name0011 4 4 Dual0011 5 5 Mortgage0011 6 6 Retail
SELECT [DealerCode],iis.[ForecastSegmentId],fs.ForecastSegmentId,[Name]FROM [dbo].[Sales] iisRIGHT OUTER JOIN dbo.Forecast fs ON fs.ForecastId = iis.ForecastId and iis.dealercode = '11'GROUP BY iis.DealerCode,iis.ForecastId,fs.ForecastId,Name
DealerCode ForecastId ForecastId NameNULL NULL 7 WholesaleNULL NULL 8 RegionNULL NULL 9 Market11 4 4 Dual11 5 5 Mortgage11 6 6 Retail
DealerCode ForecastId ForecastId NameNULL NULL 9 Market11 4 4 Dual11 5 5 Mortgage11 6 6 Retail5 4 4 Dual5 5 5 Mortgage5 6 6 Retail5 7 7 Wholesale5 8 8 Region8 4 4 Dual
DealerCode ForecastId ForecastId NameNULL NULL 7 WholesaleNULL NULL 8 RegionNULL NULL 9 Market11 4 4 Dual11 5 5 Mortgage11 6 6 RetailNULL NULL 9 Market5 4 4 Dual5 5 5 Mortgage5 6 6 Retail5 7 7 Wholesale5 8 8 RegionNULL NULL 7 WholesaleNULL NULL 8 RegionNULL NULL 9 MarketNULL NULL 8 Region8 4 4 Dual
SELECT s.DealerCode, s.ForecastID, fc.ForecastId, fc.NameFROM [dbo].[Forecast] fcOUTER APPLY (SELECT code FROM (VALUES('5'),('8'),('11'))a(code) ) cLEFT OUTER JOIN [dbo].[Sales] s ON s.DealerCode = c.code AND s.ForecastID = fc.ForecastIDORDER BY fc.Name;
SET NOCOUNT ON;--Create tablesCREATE TABLE [dbo].[Sales] ([SalesID] [int] NULL, [DealerCode] [varchar](15) NULL, [ForecastID] [int] NULL) ON [PRIMARY];CREATE TABLE [dbo].[Forecast] ([ForecastId] [int] NULL, [Name] [varchar](50) NULL) ON [PRIMARY];--Insert sample dataINSERT INTO [dbo].[Sales]SELECT SalesID, DealerCode, ForecastIDFROM (VALUES(1, '11', 4),(2, '11', 5),(3, '11', 6),(1, '5', 4), (2, '5', 5),(3, '5', 6),(1, '5', 7),(2, '5', 8), (3, '8', 4) )a(SalesID, DealerCode, ForecastID); INSERT INTO [dbo].[Forecast]SELECT ForecastID, NameFROM (VALUES(4, 'Dual'),(5, 'Mortgage'),(6, 'Retail'),(7, 'Wholesale'), (8, 'Region'),(9, 'Market') )a(ForecastID, Name); --Expected resultSELECT DealerCode, SalesForecastId, ForecastForecastId, NameFROM (VALUES(NULL,NULL,7,'Wholesale'),(NULL,NULL,8,'Region'),(NULL,NULL,9,'Market'), (11,4,4,'Dual'),(11,5,5,'Mortgage'),(11,6,6,'Retail'),(NULL,NULL,9,'Market'), (5,4,4,'Dual'),(5,5,5,'Mortgage'),(5,6,6,'Retail'),(5,7,7,'Wholesale'), (5,8,8,'Region'),(NULL,NULL,7,'Wholesale'),(NULL,NULL,8,'Region'), (NULL,NULL,9,'Market'),(NULL,NULL,8,'Region'),(8,4,4,'Dual') )a(DealerCode, SalesForecastId, ForecastForecastId, Name)ORDER BY Name;
--Actual QuerySELECT s.DealerCode, s.ForecastID, fc.ForecastId, fc.NameFROM [dbo].[Forecast] fcOUTER APPLY (SELECT code FROM (VALUES('5'),('8'),('11'))a(code) ) cLEFT OUTER JOIN [dbo].[Sales] s ON s.DealerCode = c.code AND s.ForecastID = fc.ForecastIDORDER BY fc.Name;
DealerCode ForecastID ForecastId Name--------------- ----------- ----------- --------------------------------------------------5 4 4 Dual8 4 4 Dual11 4 4 DualNULL NULL 9 MarketNULL NULL 9 MarketNULL NULL 9 Market5 5 5 MortgageNULL NULL 5 Mortgage11 5 5 Mortgage5 8 8 RegionNULL NULL 8 RegionNULL NULL 8 Region5 6 6 RetailNULL NULL 6 Retail11 6 6 Retail5 7 7 WholesaleNULL NULL 7 WholesaleNULL NULL 7 Wholesale
DealerCode SalesForecastId ForecastForecastId Name----------- --------------- ------------------ ---------5 4 4 Dual11 4 4 Dual8 4 4 DualNULL NULL 9 MarketNULL NULL 9 MarketNULL NULL 9 Market5 5 5 Mortgage11 5 5 MortgageNULL NULL 8 RegionNULL NULL 8 Region5 8 8 RegionNULL NULL 8 Region5 6 6 Retail11 6 6 RetailNULL NULL 7 Wholesale5 7 7 WholesaleNULL NULL 7 Wholesale
SELECT * FROM (SELECT DealerCode FROM Sales GROUP BY DealerCode) mCROSS JOIN Forecast fcLEFT JOIN [Sales] s on s.DealerCode = m.DealerCode AND s.ForecastID = fc.ForecastId ORDER BY m.DealerCode