Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 531219
            [titulo] => Consulta UNION, GROUP BY e COUNT na mesma query filtrando por intervalo de datas
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-09-09 18:53:35
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 231912
            [status] => A
            [isExample] => 
            [NomeUsuario] => Hugo
            [Apelido] => 
            [Foto] => 
            [Conteudo] => [quote]Fala Hugo, tranquilo? fiz so o 1º item, acho que ficaria +- assim, da um olho ai e me fala o que achou
[code]
select prt.Periodo, Cliente.Nome as Conveniado, Municipios.Nome as Cidade, Estado.Nome as Estado, 'ATIVO' as status, count(Cliente.Nome) QTD
from dbo.Pedidos prt
inner join dbo.Cliente Cliente on (Cliente.Id = prt.ClienteId)
inner join dbo.Logradouro Logradouro on (Logradouro.Id = Cliente.Logradouro01Id)
inner join dbo.Municipios Municipios on (Municipios.Id = Logradouro.MunicipioId)
inner join dbo.Estado Estado on (Estado.Id = Municipios.EstadoId)
where prt.Inativo = 0
and prt.Periodo between DataInicio and DataFim
group by prt.Periodo, Cliente.Nome as Conveniado, Municipios.Nome as Cidade, Estado.Nome as Estado;
[/code][/quote]

E aí Hector, tudo na paz?!

Muito obrigado pelo apoio, esse inicio de rotina irá me ajudar bastante.

Forte abraço ) )

Consulta UNION, GROUP BY e COUNT na mesma query filtrando por intervalo de datas

Hugo
|
MVP
    05 set 2015

Olá pessoal,

Não estou conseguindo avançar na criação de uma query que possa ter UNION, GROUP BY e COUNT baseado em um periodo de data na mesma consulta. Para eu atingir meu objetivo, necessito das seguintes ações na mesma consulta:

1º) filtrar, agrupar e contar todos os pedidos de clientes em um determinado período
2º) filtrar e agrupar os clientes que não enviaram pedidos no mesmo período
3º) identificar os clientes que enviaram pedido com um status = ATIVO
4º) Identificar os clientes que NÃO enviaram pedido com um status = INATIVO
5º) Na minha query abaixo ainda falta colocar na claúsula WHERE o filtro por intervalo de datas que passarei através de parâmetro.

Agradeço antecipadamente a ajuda dos colegas para atingir esse objetivo.

#Código

select "Cliente"."Nome" as Conveniado, "Municipios"."Nome" as Cidade,
       "Estado"."Nome" as Estado, 'ATIVO' as status
  from ((((dbo.Pedidos prt
  inner join dbo.Cliente Cliente
       on (Cliente.Id = prt.ClienteId))
  inner join dbo.Logradouro Logradouro
       on (Logradouro.Id = Cliente.Logradouro01Id))
  inner join dbo.Municipios Municipios
       on (Municipios.Id = Logradouro.MunicipioId))
  inner join dbo.Estado Estado
       on (Estado.Id = Municipios.EstadoId))
 where (prt.Inativo = 0)

UNION 

select Cliente.Nome as Conveniado, Municipios.Nome as Cidade,
       Estado.Nome as Estado, 'INATIVO' as status
  from ((((dbo.Pedidos prt
  inner join dbo.Cliente Cliente
       on (Cliente.Id = prt.ClienteId))
  inner join dbo.Logradouro Logradouro
       on (Logradouro.Id = Cliente.Logradouro01Id))
  inner join dbo.Municipios Municipios
       on (Municipios.Id = Logradouro.MunicipioId))
  inner join dbo.Estado Estado
       on (Estado.Id = Municipios.EstadoId))
 where ( )  // AQUI deverei implementar uma busca por intervalo de data, baseado no campo [prt.Cadastro], cujo os cliente AINDA NÃO fizeram pedidos no intervalo de datas

Post mais votado

Hugo
|
MVP
    09 set 2015


Citação:
Fala Hugo, tranquilo? fiz so o 1º item, acho que ficaria +- assim, da um olho ai e me fala o que achou
#Código

select prt.Periodo, Cliente.Nome as Conveniado, Municipios.Nome as Cidade, Estado.Nome as Estado, 'ATIVO' as status, count(Cliente.Nome) QTD
from dbo.Pedidos prt
  inner join dbo.Cliente Cliente on (Cliente.Id = prt.ClienteId)
  inner join dbo.Logradouro Logradouro on (Logradouro.Id = Cliente.Logradouro01Id)
  inner join dbo.Municipios Municipios on (Municipios.Id = Logradouro.MunicipioId)
  inner join dbo.Estado Estado on (Estado.Id = Municipios.EstadoId)
where prt.Inativo = 0
 and prt.Periodo between DataInicio and DataFim
group by prt.Periodo, Cliente.Nome as Conveniado, Municipios.Nome as Cidade, Estado.Nome as Estado; 


E aí Hector, tudo na paz?!

Muito obrigado pelo apoio, esse inicio de rotina irá me ajudar bastante.

Forte abraço

Hector Figueroa
   - 08 set 2015

Fala Hugo, tranquilo? fiz so o 1º item, acho que ficaria +- assim, da um olho ai e me fala o que achou
#Código

select prt.Periodo, Cliente.Nome as Conveniado, Municipios.Nome as Cidade, Estado.Nome as Estado, 'ATIVO' as status, count(Cliente.Nome) QTD
from dbo.Pedidos prt
  inner join dbo.Cliente Cliente on (Cliente.Id = prt.ClienteId)
  inner join dbo.Logradouro Logradouro on (Logradouro.Id = Cliente.Logradouro01Id)
  inner join dbo.Municipios Municipios on (Municipios.Id = Logradouro.MunicipioId)
  inner join dbo.Estado Estado on (Estado.Id = Municipios.EstadoId)
where prt.Inativo = 0
 and prt.Periodo between DataInicio and DataFim
group by prt.Periodo, Cliente.Nome as Conveniado, Municipios.Nome as Cidade, Estado.Nome as Estado;