Ir para conteúdo

POWERED BY:

Arquivado

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

Camilinhaa

[Resolvido] SQL

Recommended Posts

Oláa .. boa tarde !

 

Bem , preciso criar um comando no sql que use o group by.

Estou usando as seguintes tabelas: TRANSPORTADORA, UNIDADE_EMPRESA e PROTOCOLO

-> Preciso retornar as transportadoras e as unidades do mes 04. Tudo na mesma query.

 

o código que eu fiz :

select * from transportadora

inner join protocolo p on transportadora.cod_protocolo = p.cod_protocolo

inner join unidade_empresa ue on transportadora.cod_unidade_empresa = ue.cod_unidade_empresa

group by nom_fantasia , nom_unidade_empresa , dat_protocolo

having nom_fantasia ='correios' and nom_unidade_empresa = 'cd belem' and dat_protocolo like '%/04/%'

 

o erro que dá:

Msg 207, Level 16, State 1, Line 2

Invalid column name 'cod_protocolo'.

Msg 207, Level 16, State 1, Line 3

Invalid column name 'cod_unidade_empresa'

 

Não sei porqe dá esse erro , pois tem essas colunas nessas tabelas e também são PK.

Sei qe sem o banco de dados fica dificil responder . mas se tiverem alguma ideia de como posso melhorar o código.. eeu agradeçoo.

Obrigada ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camilinhaa

Bem vindo ao fórum. Não esqueça de dar uma passada nas regras para conhece-las.

 

Com relação ao seu problema, qdo se utiliza "alias" no nome das tabelas, tem que usar estes mesmos alias no having, where, group by

 

select * 
from transportadora tr inner join protocolo p 
          on tr.cod_protocolo = p.cod_protocolo
inner join unidade_empresa ue 
          on tr.cod_unidade_empresa = ue.cod_unidade_empresa
group by tr.nom_fantasia
               , tr.nom_unidade_empresa 
               ,protocolo.dat_protocolo
having tr.nom_fantasia ='correios' 
            and tr.nom_unidade_empresa = 'cd belem' 
            and p.dat_protocolo like '%/04/%'

 

Estes campos estão corretos né? ou seja, existem nas respectivas tabelas?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camilinhaa

Bem vindo ao fórum. Não esqueça de dar uma passada nas regras para conhece-las.

 

Com relação ao seu problema, qdo se utiliza "alias" no nome das tabelas, tem que usar estes mesmos alias no having, where, group by

 

select * 
from transportadora tr inner join protocolo p 
          on tr.cod_protocolo = p.cod_protocolo
inner join unidade_empresa ue 
          on tr.cod_unidade_empresa = ue.cod_unidade_empresa
group by tr.nom_fantasia
               , tr.nom_unidade_empresa 
               ,protocolo.dat_protocolo
having tr.nom_fantasia ='correios' 
            and tr.nom_unidade_empresa = 'cd belem' 
            and p.dat_protocolo like '%/04/%'

 

Estes campos estão corretos né? ou seja, existem nas respectivas tabelas?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) O agrupamento (group by) é usado para agrupar ou totalizar registros

2) o HAVING é uma condiçao do group e não dos registros, para isto use WHERE

 

select nom_fantasia , nom_unidade_empresa , dat_protocolo , count(*) qtd_total 
from transportadora
inner join protocolo p on transportadora.cod_protocolo = p.cod_protocolo
inner join unidade_empresa ue on transportadora.cod_unidade_empresa = ue.cod_unidade_empresa
where nom_fantasia ='correios' and nom_unidade_empresa = 'cd belem' and dat_protocolo like '%/04/%'
group by nom_fantasia , nom_unidade_empresa , dat_protocolo
having count(*) >= 13 /*só quem tem 13 ou mais*/

 

No mais procure ler algum mateiral sobre SQL, vai te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oii jus2ka ^^

muito obrigada pela ajudaa .. mas deu mais erro :/ acredita ?

eu não estou entendendo , sinceramente .. porqe esses campos existem nas respectivas tabelas .. maas eu to com uma dúvidaa ..

tipo .. pra fazer ligação entre as tabelas .. na tabela UNIDADE_EMPRESA eu estou utilizando a PK cod_unidade_empresa ..

aí eu fui na tabela PROTOCOLO e vi qe lá tem uma FK com o nome de cod_unidade_empresa . :(

 

será qe o erro está ligado a isso ? Tem alguma coisa a ver ? :o

 

Desculpas pelas perguntas , mas é que eu estou fazendo estagio nessa áera .. e sinceramente .. nunca imaginei que eu fosse trabalhar com isso e muito menos qe eu fosse gostar .. maas é que eu fico triste quando dá uns erros que eu não sei o que é e não consigo resolver.. =\

 

Sepuder me ajudar ...

Obrigada =]

 

1) O agrupamento (group by) é usado para agrupar ou totalizar registros

2) o HAVING é uma condiçao do group e não dos registros, para isto use WHERE

 

select nom_fantasia , nom_unidade_empresa , dat_protocolo , count(*) qtd_total 
from transportadora
inner join protocolo p on transportadora.cod_protocolo = p.cod_protocolo
inner join unidade_empresa ue on transportadora.cod_unidade_empresa = ue.cod_unidade_empresa
where nom_fantasia ='correios' and nom_unidade_empresa = 'cd belem' and dat_protocolo like '%/04/%'
group by nom_fantasia , nom_unidade_empresa , dat_protocolo
having count(*) >= 13 /*só quem tem 13 ou mais*/

 

No mais procure ler algum mateiral sobre SQL, vai te ajudar.

 

Huum .. tendii .. Obrigada ^^

Mas o nom_unidade e a dat_protocolo estao em outras tabelas .. =\

não são da TRANSPORTDORA =\

eeu to lendo .. mas não acho solução para o meu problema :(

Mas , Obrigada :)

Compartilhar este post


Link para o post
Compartilhar em outros sites
... Mas o nom_unidade e a dat_protocolo estao em outras tabelas ...

 

Sem problemas, isto foi resolvido nos joins.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada gentee ^^

consegui :)

 

select nom_fantasia , nom_unidade_empresa , dat_protocolo 
from transportadora
inner join protocolo p on transportadora.cod_transportadora = p.cod_transportadora
inner join unidade_empresa ue on p.cod_unidade_empresa = ue.cod_unidade_empresa
where nom_fantasia = 'correios' and nom_unidade_empresa = 'cd belem' 
group by nom_fantasia , nom_unidade_empresa , dat_protocolo 

 

essa deu certinho ;)

 

Outraa dúvida ..

como faço para desmembrar essa data ? Separar o ano do mês ?

 

Obrigada :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.