problemas com o Group by

SQL Server

SQL

26/04/2018

Boa tarde galera, estou tendo problemas na hora de exibir uma informação (nomea.cdnomeacao), a consulta não retorna erros, apenas não retorna nenhuma informação.

select nome.cdnomeacao, substring(replace(str(nomea.CdFuncionario,9 ) + str(func.DVFuncionario, 2), '''' '''', ''''0''''),1,11) as CPF,
nmfuncionario as [Nome servidor], valor [Base de calculo]

from TNomeacoes as nomea
left join Funcio as func on nomea.CdEmpresa = func.CdEmpresa and nomea.CdFuncionario = func.CdFuncionario
left join Car as car on nomea.CdEmpresa = car.CdEmpresa and nomea.CdCargo = car.CdCargo
left join Lot as lota on nomea.CdEmpresa = lota.CdEmpresa and nomea.CdLotacao = lota.CdLotacao
left join Financeira as finan on nomea.CdEmpresa = finan.CdEmpresa and nomea.CdNomeacao = finan.CdNomeacao

where nomea.CdNomeacao in (select CdNomeacao
from Financeira
where Periodo = 201803 and CdEvento = 1)and TpCargo = ''''T'''' and Situacao != ''''D''''
and CdEstrutura = 1 and Periodo = 201803 and finan.CdEvento = 1

group by nome.cdnomeacao, nomea.CdFuncionario , func.DVFuncionario , NmFuncionario, Valor
having (count(TpCargo) >= 2 )
left join Financeira as finan on nomea.CdEmpresa = finan.CdEmpresa and nomea.CdNomeacao = finan.CdNomeacao

where nomea.CdNomeacao in (select CdNomeacao
from TFFinanceira
where Periodo = 201803 and CdEvento = 1)and TpCargo = ''''T'''' and Situacao != ''''D''''
and CdEstrutura = 1 and Periodo = 201803 and finan.CdEvento = 1

group by TpCargo, nomea.CdFuncionario , func.DVFuncionario , NmFuncionario, Valor
having (count(TpCargo) >= 2 )
Demetrio Lopes

Demetrio Lopes

Curtidas 0

Melhor post

Alex William

Alex William

30/04/2018

Eae meu amigo, blza?
Vou ver se consigo te ajudar, vamos la:

Primeira coisa que eu notei, no teu WHERE tu coloca
nomea.CdNomeacao in (select CdNomeacaofrom Financeirawhere Periodo = 201803 and CdEvento = 1)

e logo depois, tem umas condições a mais que são:
and TpCargo = ''''T'''' and Situacao != ''''D''''
			and CdEstrutura = 1 and Periodo = 201803 and finan.CdEvento = 1

só que não colocou de qual tabela pertence os campos "TpCargo", "Situacao", "CdEstrutura" e "Periodo". Acredito que isso esteja trancando sua consulta.

Outra coisa, em SQLServer, pra que um campo entre em GROUP BY ele deve estar listado nos campos a serem exibidos.

E assim, acho que você deve revisar essa query, porque tu ta com um WHERE dentro de um WHERE, tu fechou teu "in" nessa parte:
from Financeira
			where Periodo = 201803 and CdEvento = 1)

e continua a query, pelo que eu notei, como se ainda estivesse aberta. Depois posta se conseguiu. ;D
GOSTEI 3

Mais Respostas

Demetrio Lopes

Demetrio Lopes

26/04/2018

BLz mano, muito obrigado, só posso testar na quarta, porque esse select é a modificação das tabelas do banco do meu trabalho kkkk. Muito obrigado. Quarta de dou um retorno. obrigão
GOSTEI 1
Demetrio Lopes

Demetrio Lopes

26/04/2018

entao mano, tudo bom? eu fiz umas mudanças, mas não deu certo. As mudanças foram feitas adicionando os nomes da tabelas junto com o nome da coluna tudo direitinho, mas mesmo assim o select não deu certo.

quanto ao ultimo where que você havia falado, realmente foi uma erro na hora de copiar o select. enfim!! eu transformei esse select que publiquei em um subselect. E deu tudo certo o.O! mas até então nao sei qual é o problema desse select que publiquei


OBRIGADO
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/04/2018

Cara, esta query está bem confusa.... fiz algumas alterações, pra eu tentar ao menos entender qual o resultado esperado.

select
  nomea.cdnomeacao,
  substring(replace(str(nomea.CdFuncionario,9 ) + str(func.DVFuncionario, 2), ' ', '0'),1,11) as CPF,
  func.nmfuncionario as [Nome servidor],
  sum(func.valor) [Base de calculo]
from TNomeacoes as nomea
left join Funcio as func on func.CdEmpresa = nomea.CdEmpresa
  and func.CdFuncionario = nomea.CdFuncionario
  and func.Situacao != 'D'
left join Car on car.CdEmpresa = nomea.CdEmpresa and car.CdCargo = nomea.CdCargo
  and car.TpCargo = 'T'
left join Lot as lota on lota.CdEmpresa = nomea.CdEmpresa and lota.CdLotacao = nomea.CdLotacao
left join Financeira as finan on finan.CdEmpresa = nomea.CdEmpresa
  and finan.CdNomeacao = nomea.CdNomeacao
  and finan.Periodo = 201803
  and finan.CdEvento = 1
  and finan.CdEstrutura = 1
group by nomea.cdnomeacao, nomea.CdFuncionario, func.DVFuncionario, func.NmFuncionario
having count(*) >= 2
GOSTEI 1
Demetrio Lopes

Demetrio Lopes

26/04/2018

ok muito obrigado, vou ler com calma, pena que não acesso ao banco nos finais de semana, mas na segunda respondo o mais rápido possível. Gostei da forma com a qual você organiza o select, vou usar essa forma, bem mais fácil de entender. MUITO OBRIGADO
GOSTEI 0
Demetrio Lopes

Demetrio Lopes

26/04/2018

boa tarde mano, o seu jeito também não deu certo. tive que fazer um subselect pra dar certo.
GOSTEI 0
POSTAR