• ### Pergunta

• Minha query não retorna os dias agrupados (repete campanhas e dias) e traz 31 dias, ao invés de apenas 8 com o filtro para abril, pois estamos no dia 9 e preciso de consulta d-1.

declare @Competencia varchar(6) = '201404'

`SELECT DIA,		CAMPANHA		,CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END AS Venda		,CASE WHEN FLVENDACANC = 'S' THEN COUNT(pedido*-1) ELSE COUNT(pedido) END as Pedidos		,(CASE WHEN FLVENDACANC = 'S' AND MES = '01' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END		/day(GETDATE()-1)) * (31 - day(GETDATE()-1)) 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+(CASE WHEN FLVENDACANC = 'S' AND MES = '02' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END		/day(GETDATE()-1))* (28 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '03' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(31 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '04' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(30 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '05' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(31 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '06' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '07' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1)) 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '08' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '09' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '10' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END +		+ CASE WHEN FLVENDACANC = 'S' and MES = '11' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '12' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END AS Aponta 	into #v_pedidos_contrato_mapa_B2B from dwMagazineLuiza.dbo.v_pedidos_contrato_mapa_B2B (nolock) 	where CANAL = 'PROGRAMAS' AND (COMPETENCIA = @Competencia) group by DIA, CAMPANHA, FLVENDACANC, MESORDER BY DIA ASCSELECT DIA, CAMPANHA, SUM(VENDA) AS Venda, SUM(Pedidos) as Pedidos, SUM(aponta) as Aponta from #v_pedidos_contrato_mapa_B2Bgroup by DIA, CAMPANHAORDER BY DIA ASCdrop table #v_pedidos_contrato_mapa_B2B`

quarta-feira, 9 de abril de 2014 12:05

### Respostas

• Por exemplo, filtro mês de abril.como aqui é d-1, deveria trazer dias 1, 2, 3, 4, 5, 6, 7, e 8, porém, traz do dia 1 até o 31...só que além de estarmos no dia 09, abril tem 30 dias...

Ricardo,

Sua consulta principal no primeiro SELECT não cria nenhum limitador de data D-1, basta incluir esta condição na sua cláusula WHERE. Veja um exemplo abaixo:

```...
WHERE CANAL = 'PROGRAMAS' AND (COMPETENCIA = @Competencia)
AND DIA <= DAY(GETDATE() - 1)
GROUP BY DIA, CAMPANHA, FLVENDACANC, MES
```

Se ajudou na sua solução, não esqueça de marcar como resposta !

Abraços,

Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
• Sugerido como Resposta quinta-feira, 10 de abril de 2014 18:16
• Marcado como Resposta quinta-feira, 10 de abril de 2014 20:52
quinta-feira, 10 de abril de 2014 11:54

### Todas as Respostas

• Minha query não retorna os dias agrupados (repete campanhas e dias) e traz 31 dias, ao invés de apenas 8 com o filtro para abril, pois estamos no dia 9 e preciso de consulta d-1.

declare @Competencia varchar(6) = '201404'

`SELECT DIA,		CAMPANHA		,CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END AS Venda		,CASE WHEN FLVENDACANC = 'S' THEN COUNT(pedido*-1) ELSE COUNT(pedido) END as Pedidos		,(CASE WHEN FLVENDACANC = 'S' AND MES = '01' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END		/day(GETDATE()-1)) * (31 - day(GETDATE()-1)) 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+(CASE WHEN FLVENDACANC = 'S' AND MES = '02' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END		/day(GETDATE()-1))* (28 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '03' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(31 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '04' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(30 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '05' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(31 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '06' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '07' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1)) 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '08' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '09' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '10' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END +		+ CASE WHEN FLVENDACANC = 'S' and MES = '11' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '12' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END AS Aponta 	into #v_pedidos_contrato_mapa_B2B from dwMagazineLuiza.dbo.v_pedidos_contrato_mapa_B2B (nolock) 	where CANAL = 'PROGRAMAS' AND (COMPETENCIA = @Competencia) group by DIA, CAMPANHA, FLVENDACANC, MESORDER BY DIA ASCSELECT DIA, CAMPANHA, SUM(VENDA) AS Venda, SUM(Pedidos) as Pedidos, SUM(aponta) as Aponta from #v_pedidos_contrato_mapa_B2Bgroup by DIA, CAMPANHAORDER BY DIA ASCdrop table #v_pedidos_contrato_mapa_B2B`

Poxa, uma ajuda urgente, por favor pessoal...
quarta-feira, 9 de abril de 2014 12:31
• Minha query não retorna os dias agrupados (repete campanhas e dias) e traz 31 dias, ao invés de apenas 8 com o filtro para abril, pois estamos no dia 9 e preciso de consulta d-1.

declare @Competencia varchar(6) = '201404'

`SELECT DIA,		CAMPANHA		,CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END AS Venda		,CASE WHEN FLVENDACANC = 'S' THEN COUNT(pedido*-1) ELSE COUNT(pedido) END as Pedidos		,(CASE WHEN FLVENDACANC = 'S' AND MES = '01' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END		/day(GETDATE()-1)) * (31 - day(GETDATE()-1)) 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+(CASE WHEN FLVENDACANC = 'S' AND MES = '02' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END		/day(GETDATE()-1))* (28 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '03' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(31 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '04' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(30 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '05' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(31 - day(GETDATE()-1)) + 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '06' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) * 		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END 		+ CASE WHEN FLVENDACANC = 'S' and MES = '07' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1)) 		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '08' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '09' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '10' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END +		+ CASE WHEN FLVENDACANC = 'S' and MES = '11' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(30 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END + 		+ CASE WHEN FLVENDACANC = 'S' and MES = '12' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END/day(GETDATE()-1) *		(31 - day(GETDATE()-1))  		+ CASE WHEN FLVENDACANC = 'S' THEN SUM(vlvenda*-1) ELSE SUM(vlvenda) END AS Aponta 	into #v_pedidos_contrato_mapa_B2B from dwMagazineLuiza.dbo.v_pedidos_contrato_mapa_B2B (nolock) 	where CANAL = 'PROGRAMAS' AND (COMPETENCIA = @Competencia) group by DIA, CAMPANHA, FLVENDACANC, MESORDER BY DIA ASCSELECT DIA, CAMPANHA, SUM(VENDA) AS Venda, SUM(Pedidos) as Pedidos, SUM(aponta) as Aponta from #v_pedidos_contrato_mapa_B2Bgroup by DIA, CAMPANHAORDER BY DIA ASCdrop table #v_pedidos_contrato_mapa_B2B`

Poxa, uma ajuda urgente, por favor pessoal...
Ng pra ajudar pessoal? Por favor...
quarta-feira, 9 de abril de 2014 13:18
• Ninguém?
quarta-feira, 9 de abril de 2014 16:35
• Ricardo,

Você poderia postar uma parte do resultado desta consulta para que possamos entender quais campos ou informações podem estar impedindo este agrupamento.

Se ajudou na sua solução, não esqueça de marcar como resposta !

Abraços,

Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
quarta-feira, 9 de abril de 2014 19:15
• Por exemplo, filtro mês de abril.como aqui é d-1, deveria trazer dias 1, 2, 3, 4, 5, 6, 7, e 8, porém, traz do dia 1 até o 31...só que além de estarmos no dia 09, abril tem 30 dias...
quarta-feira, 9 de abril de 2014 19:51
• Por exemplo, filtro mês de abril.como aqui é d-1, deveria trazer dias 1, 2, 3, 4, 5, 6, 7, e 8, porém, traz do dia 1 até o 31...só que além de estarmos no dia 09, abril tem 30 dias...

Ricardo,

Sua consulta principal no primeiro SELECT não cria nenhum limitador de data D-1, basta incluir esta condição na sua cláusula WHERE. Veja um exemplo abaixo:

```...
WHERE CANAL = 'PROGRAMAS' AND (COMPETENCIA = @Competencia)
AND DIA <= DAY(GETDATE() - 1)
GROUP BY DIA, CAMPANHA, FLVENDACANC, MES
```

Se ajudou na sua solução, não esqueça de marcar como resposta !

Abraços,

Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
• Sugerido como Resposta quinta-feira, 10 de abril de 2014 18:16
• Marcado como Resposta quinta-feira, 10 de abril de 2014 20:52
quinta-feira, 10 de abril de 2014 11:54