Если у вас есть таблица магазинов и продуктов, просто используйте как CROSS JOIN
:
USE Sandbox;
GO
CREATE TABLE Table_time (MonthNumber int,
WeekNumber int);
INSERT INTO dbo.Table_time (MonthNumber,
WeekNumber)
VALUES (1,01),
(1,02),
(1,03),
(1,04),
(2,05),
(2,06),
(2,07),
(2,08),
(3,09),
(3,10),
(3,11),
(3,12);
CREATE TABLE Store (StoreID varchar(3));
INSERT INTO Store (StoreID)
VALUES ('ST1'),('ST2');
GO
CREATE TABLE Product (ProductID varchar(2));
INSERT INTO Product
VALUES('P1'),('P2'),('P3'),('P4');
GO
SELECT *
FROM Table_time
CROSS JOIN Product
CROSS JOIN Store;
GO
Если вы хотите агрегировать, вы можете добавить LEFT JOIN
к вашей таблице sales
:
SELECT TT.MonthNumber,
TT.MonthNumber,
P.ProductID,
S.StoreID,
COUNT(SS.ID)
FROM Table_time TT
CROSS JOIN Product P
CROSS JOIN Store S
LEFT JOIN Sales SS ON TT.MonthNumber = SS.MonthNumber
AND TT.WeekNumber = SS.WeekNumber
AND P.ProductID = SS.ProductID
AND S.StoreID = SS.StoreID;