Eu tenho essas duas tabelas
DECLARE @Site TABLE (
SiteCode varchar(4) NOT NULL
);
INSERT INTO @Site (SiteCode)
VALUES
('S1'),
('S2'),
('S3'),
('S4')
DECLARE @SiteStatus TABLE (
SiteCode varchar(4) NOT NULL,
Year int NOT NULL,
Month varchar(10) NOT NULL,
UploadCount int NOT NULL
);
INSERT INTO @SiteStatus (SiteCode, Year, Month, UploadCount)
VALUES
('S1', 2024, 'March', 1),
('S1', 2024, 'April', 1),
('S1', 2024, 'May', 1),
('S1', 2024, 'June', 1),
('S2', 2024, 'March', 1),
('S2', 2024, 'April', 1),
('S2', 2024, 'May', 0),
('S2', 2024, 'June', 0),
('S3', 2024, 'March', 1),
('S3', 2024, 'April', 0)
E eu quero escrever uma consulta que retornará o seguinte
SELECT ... ?
'S1', 2024, 'March', 1
'S1', 2024, 'April', 1
'S1', 2024, 'May', 1
'S1', 2024, 'June', 1
'S2', 2024, 'March', 1
'S2', 2024, 'April', 1
'S2', 2024, 'May', 0
'S2', 2024, 'June', 0
'S3', 2024, 'March', 1
'S3', 2024, 'April', 0
'S3', 2024, 'May', 0
'S3', 2024, 'June', 0
'S4', 2024, 'March', 0
'S4', 2024, 'April', 0
'S4', 2024, 'May', 0
'S4', 2024, 'June', 0
Basicamente, adicione zero registros para todos os combos de data do site ausentes no SiteStatus.
Obrigado!
Você pode usar
CTEs
para obter primeiro todasDistinct
as combinações de ano/mês, depoiscross join
isso com todos os sites e o resultado pode ser usado paraLEFT JOIN
site_status.Mas, como observação, seria melhor salvar as datas como datas e depois extrair o ano e o mês, o que economiza espaço e ajudaria a classificar corretamente.
violino