Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AEM

Consultas SQL -> GROUP BY - HAVING - INNER JOIN

Recommended Posts

Ae pessoal, beleza... preciso de uma ajudaComo montar um relatório com a seguinte estrutura:Tabelas:ClientesPedidos Objetivo: Preciso de um relatorio que contenha os dados dos cliente em um cabeçalho e o restante os montantes dos valores agrupados por mêsmas tudo isto automático e com uma única instrução SQLBom sou leigo no assunto... aceito novas idéias.. mas preciso desta estruturaEx:Cliente : AUTO POSTO BLA BLA BLAValores Acumulados por mês01/2005 - 1000,0002/2005 - 2000,00e assim por dianteo problema é q o programa tem que identificar os meses e os anos que possuem os dados... Valeu pela ajuda pessoalno aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue exemplo de SQL

Select          a.cd_cliente,          a.ds_nome_cliente,          a.cpf_cnpj_cliente          b.month(dt_pedido) Mes,          b.Year(dt_pedido) Ano,          Sum(b.vr_pedido) VrPedidofrom         tb_cliente a (nolock)                 Left Join tb_pedido b (nolock)  on                 a.cd_cliente = b.cd_clienteGroup By          a.cd_cliente,          a.ds_nome_cliente,          a.cpf_cnpj_cliente          b.month(dt_pedido),          b.Year(dt_pedido)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, tem como .. se não for pedir muito você explicar oq fez...eu entendi +/- mas ainda nao testei... teria como explicar oq siginifica o A. e o B. o NOLOCK e o LEFT JOINc nao der deixa.. valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso de um outro relatório com a mesma estrutura, mas que o usuário digite uma data inicial e uma data final e o filtro aconteça entre as datas... rsrs (ja to pedindo muito né)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso só vai funcionar se for SQL Server.a = Alias (Apelido) da tabela (perceba que após o nome da tabela eu indiquei um alias para ela que no caso foi a letra Ab = A mesma coisa só que da outra tabelaNoLock = Indica ao SQLServer que ele não deve bloquear os registros da tabela no momento em que ele estiver fazendo a consulta (Esse parâmetro é opcional, mas, é muito bom usar, garante uma performance bem melhor)Left Join = Indica que o SQL deverá pegar todos os registro da tabela "Da esquerda" e os registros da tabela "Da direita" somente onde ouver coincîdência na expressão de critério.Em relação ao Left Join imagine que, se eu, ao invés de ter escrito o nome das tabelas tivesse colocado uma do lado da outra. Na mesma ordem que escrevi, então, o "Left" indica tabela da esquerda. Entendeu ??Ao invés de utilizar Left eu poderia utilizar ainda "Inner Join" ou "Right Join", o Right Join faria extamento o contrário do "Left Join" e o "Inner Join" pegaria somente os registros que houve a mesma expressão de critério nas duas tabelas.Falow !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz.. Foi mal, burrice a minha nao ter explicado q seria para uso em Access... desculpe.. mas entendi a sua explicação..se souber em access e puder ajudar agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É quase IGUAL

Select         a.cd_cliente,         a.ds_nome_cliente,         a.cpf_cnpj_cliente         b.month(dt_pedido) Mes,         b.Year(dt_pedido) Ano,         Sum(b.vr_pedido) VrPedidofrom tb_cliente as a                 Left Join tb_pedido as b  on                a.cd_cliente = b.cd_clienteGroup By         a.cd_cliente,         a.ds_nome_cliente,         a.cpf_cnpj_cliente         b.month(dt_pedido),         b.Year(dt_pedido)

Compartilhar este post


Link para o post
Compartilhar em outros sites

deu certo.. valeu...mas como faço agora.. pra selecionar este resultado todo por um periodo de data..no exemplo anterior ele buscou oq a tabela tinha pra informar.. mas agora preciso selecionar um periodo..

Compartilhar este post


Link para o post
Compartilhar em outros sites
Select        a.cd_cliente,        a.ds_nome_cliente,        a.cpf_cnpj_cliente        b.month(dt_pedido) Mes,        b.Year(dt_pedido) Ano,        Sum(b.vr_pedido) VrPedidofrom tb_cliente as a                Left Join tb_pedido as b  on               a.cd_cliente = b.cd_clientewhere         b.dt_pedido >= #MM/DD/AAAA# and         b.dt_pedido <= #MM/DD/AAAA#Group By        a.cd_cliente,        a.ds_nome_cliente,        a.cpf_cnpj_cliente        b.month(dt_pedido),        b.Year(dt_pedido)

Compartilhar este post


Link para o post
Compartilhar em outros sites

por exemplo;;pedidosID valor Pedido Data_Pedido1 1000,00 15/02/20052 1000,00 16/03/20053 1000,00 18/04/2005Preciso que o SQL pegue depois de 15/02/2005 e antes de 18/04/2005ou seja só apareça o mes 03só q digito a data e ele aparece os que tem mes 02

Compartilhar este post


Link para o post
Compartilhar em outros sites

where a.COD_CLIENTE = 2 AND b.Data_PEDIDO >=#01/03/2005# AND b.Data_Consulta <=# 18/05/2005#

Mesmo assim aparece o mes 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui... o problema agora.. é fazer com q o MES utilizando o MONTH() em VBSCRIPT saia no forma mm e nao mex.Janeiro - 01 e nao 1como forçar o servidor a voltar isto com dois digitos no mes?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara ... Valeu mesmo.. você salvou minha pele....oq precisar pode dizer...vou postar outro tópico para esclarecer outras dúvidas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.