Campos no Select mais não no Group By

Bom dia galera, to precisando fazer uma parada aqui na minha consulta mais não sei se da certo, tenho que colocar um campo para aparecer no select, mais quando coloco ele me retorna um erro falando que precisar se colocado também no Group by, por causa de uma soma que fiz com outro campo, para minha minha query ficar certa, esse campo tem que aparecer no select mais não no Group By, tem como fazer isso??

Qual banco de dados você utiliza?

Tenta assim … deve resolver o seu problema:

select coluna1. coluna2, total from (
select coluna1, coluna2, sum(coluna3 + coluna4) as total from tabela group by coluna1, coluna2 coluna3, coluna4 );

Estou usando SQLServer 2005…

[quote=Aleksandro]Tenta assim … deve resolver o seu problema:

select coluna1. coluna2, total from (
select coluna1, coluna2, sum(coluna3 + coluna4) as total from tabela group by coluna1, coluna2 coluna3, coluna4 );[/quote]
Boa tarde, não entendi muito bem como fazer, tem como vc me da um exemplo usando minha query?

select ROW_NUMBER() over(order by year(ede.data)) as 'CLASSIFICAÇÃO', eee.nome as 'NOME', sum(ede.valortot) as 'TOTAL A PAGAR', case when mtcpl.codcur = 1 then 'DIREITO' when mtcpl.codcur = 3 then 'MEDICINA' when mtcpl.codcur = 5 then 'SISTEMAS DE INFORMAÇÃO' when mtcpl.codcur = 6 then 'NUTRIÇÃO' when mtcpl.codcur = 7 then 'ADMINISTRAÇÃO' when mtcpl.codcur = 8 then 'EDUCÃÇÃO FÍSICA' end as 'CURSO', //turma.codtur as 'TURMA', // <-- TENHO QUE COLOCAR ESSA LINHA isnull(ealunos.telaluno,'-') as 'TELEFONE' from eee, mtcpl, //turma, // <-- TENHO QUE COLOCAR ESSA LINHA ede, fl where mtcpl.status = 'MA' and fl.valorbaixado = 0.0000 and fl.datapag is null and fl.databaixa is null and ede.valorpago = 0 and ede.valortot > 0.00 and ede.datapag is null and mtcpl.mataluno = eee.matricula and mtcpl.mataluno = ede.mataluno and mtcpl.perletivo = ede.perletivo and mtcpl.codcur = ede.codcur // and mtcpl.perletivo = turma.codperlet //and mtcpl.codcur = turma.codcur and ede.codlanc = fl.idlan and fl.statuslan not in (0) group by eee.nome, YEAR(ede.data), eee.telaluno, mtcpl.codcur //turma.codtur // <-- ISSO NÃO PODE APARECER AQUI..

Uma pergunta simples:

Se colocares a turma no GROUP BY vais ter registos repetidos com a turma diferente, certo?

1 João 1000 DIREITO turma1 999999999
2 João 1500 DIREITO turma2 999999999

E tu queres algo assim

1 João 2500 DIREITO ??? 999999999

Mas neste caso, o que deve aparecer em ???

[quote=pmlm]Uma pergunta simples:

Se colocares a turma no GROUP BY vais ter registos repetidos com a turma diferente, certo?

1 João 1000 DIREITO turma1 999999999
2 João 1500 DIREITO turma2 999999999

E tu queres algo assim

1 João 2500 DIREITO ??? 999999999

Mas neste caso, o que deve aparecer em ???[/quote]

Sim, o que eu quero é esse resultado que você transcreveu ai acima, pois é, o solicitado é isso ai mesmo, somar o total de cada pessoa, independente se ele está em outras turmas, no pontos de interrogação, tem que aparecer a turma, mais ai tem um problema, se o cara está em duas turmas, o seu total irá aparecer em qual turma???
Como no seu exemplo ele está em 2 turmas, o total dele pode ser vinculado a qualquer turma!!

se é em qq turma, basta por no select, por exemplo,

[quote=pmlm]se é em qq turma, basta por no select, por exemplo,

[/quote]
Ai mano, inserir o MAX, agora deu outro probleminha, a soma veio errada… =/

[quote=Anderson S.][quote=Aleksandro]Tenta assim … deve resolver o seu problema:

select coluna1. coluna2, total from (
select coluna1, coluna2, sum(coluna3 + coluna4) as total from tabela group by coluna1, coluna2 coluna3, coluna4 );[/quote]
Boa tarde, não entendi muito bem como fazer, tem como vc me da um exemplo usando minha query?

select ROW_NUMBER() over(order by year(ede.data)) as 'CLASSIFICAÇÃO', eee.nome as 'NOME', sum(ede.valortot) as 'TOTAL A PAGAR', case when mtcpl.codcur = 1 then 'DIREITO' when mtcpl.codcur = 3 then 'MEDICINA' when mtcpl.codcur = 5 then 'SISTEMAS DE INFORMAÇÃO' when mtcpl.codcur = 6 then 'NUTRIÇÃO' when mtcpl.codcur = 7 then 'ADMINISTRAÇÃO' when mtcpl.codcur = 8 then 'EDUCÃÇÃO FÍSICA' end as 'CURSO', //turma.codtur as 'TURMA', // <-- TENHO QUE COLOCAR ESSA LINHA isnull(ealunos.telaluno,'-') as 'TELEFONE' from eee, mtcpl, //turma, // <-- TENHO QUE COLOCAR ESSA LINHA ede, fl where mtcpl.status = 'MA' and fl.valorbaixado = 0.0000 and fl.datapag is null and fl.databaixa is null and ede.valorpago = 0 and ede.valortot > 0.00 and ede.datapag is null and mtcpl.mataluno = eee.matricula and mtcpl.mataluno = ede.mataluno and mtcpl.perletivo = ede.perletivo and mtcpl.codcur = ede.codcur // and mtcpl.perletivo = turma.codperlet //and mtcpl.codcur = turma.codcur and ede.codlanc = fl.idlan and fl.statuslan not in (0) group by eee.nome, YEAR(ede.data), eee.telaluno, mtcpl.codcur //turma.codtur // <-- ISSO NÃO PODE APARECER AQUI..[/quote]

Tá estranho este select , você quer trazer a coluna turma.codtur , porém ela não liga com ninguém … tá certo este select …

No oracle , faria um subselect ligando com a tabela turma , no MS deve dar para fazer também …

[quote=Aleksandro][quote=Anderson S.][quote=Aleksandro]Tenta assim … deve resolver o seu problema:

select coluna1. coluna2, total from (
select coluna1, coluna2, sum(coluna3 + coluna4) as total from tabela group by coluna1, coluna2 coluna3, coluna4 );[/quote]
Boa tarde, não entendi muito bem como fazer, tem como vc me da um exemplo usando minha query?

select ROW_NUMBER() over(order by year(ede.data)) as 'CLASSIFICAÇÃO', eee.nome as 'NOME', sum(ede.valortot) as 'TOTAL A PAGAR', case when mtcpl.codcur = 1 then 'DIREITO' when mtcpl.codcur = 3 then 'MEDICINA' when mtcpl.codcur = 5 then 'SISTEMAS DE INFORMAÇÃO' when mtcpl.codcur = 6 then 'NUTRIÇÃO' when mtcpl.codcur = 7 then 'ADMINISTRAÇÃO' when mtcpl.codcur = 8 then 'EDUCÃÇÃO FÍSICA' end as 'CURSO', //turma.codtur as 'TURMA', // <-- TENHO QUE COLOCAR ESSA LINHA isnull(ealunos.telaluno,'-') as 'TELEFONE' from eee, mtcpl, //turma, // <-- TENHO QUE COLOCAR ESSA LINHA ede, fl where mtcpl.status = 'MA' and fl.valorbaixado = 0.0000 and fl.datapag is null and fl.databaixa is null and ede.valorpago = 0 and ede.valortot > 0.00 and ede.datapag is null and mtcpl.mataluno = eee.matricula and mtcpl.mataluno = ede.mataluno and mtcpl.perletivo = ede.perletivo and mtcpl.codcur = ede.codcur // and mtcpl.perletivo = turma.codperlet //and mtcpl.codcur = turma.codcur and ede.codlanc = fl.idlan and fl.statuslan not in (0) group by eee.nome, YEAR(ede.data), eee.telaluno, mtcpl.codcur //turma.codtur // <-- ISSO NÃO PODE APARECER AQUI..[/quote]

Tá estranho este select , você quer trazer a coluna turma.codtur , porém ela não liga com ninguém … tá certo este select …

No oracle , faria um subselect ligando com a tabela turma , no MS deve dar para fazer também …
[/quote]
O Select ta certo, por que o relacionamento da tabela ‘turma’ acontece exatamente nas linhas 32 e 33, // and mtcpl.perletivo = turma.codperlet //and mtcpl.codcur = turma.codcur, até ai tudo bem, a turma está vindo corretamente, o único porém é que se não coloca-la no group by, me volta um erro solicitando a inserção da mesma no group by, e se coloca-la no group by, meu resultado fica todo errado, por que abrir esse post solicitando se tem como colocar um valor no select sem que ele esteja no group by…

[quote=pmlm]se é em qq turma, basta por no select, por exemplo,

[/quote]
Outro porém em relação ao MAX, é que se inserir esse comando no campo turma.codtur, ele traz a maior turma, ou seja, vai trazer a mesma turma para todos os alunos, se tiver um aluno vinculado a 2 ou mais turma, tenho que mostrar o total a pagar desse aluno, e a turma pode ser qualquer uma, desde que está esteja vinculada a ele, como no exemplo que você inseriu ai acima, para João tanto faz listar a turma1 ou a turma2, o importante é a soma do seu total está correto e aparecer na lista uma das turmas vinculadas a ele…

O MAX vai trazer a “maior” turma para o aluno em causa. A soma não tem em conta a turma já que não está agrupado por turma e soma para todas as turmas, que penso que é o que pretendes.

Pois é cara muito estranho isso mesmo, está trazendo uma turma para todos as linhas da consulta, e a soma está aparecendo errada!!
=/

Como está o teu select?

O Select é esse citado ai acima…

E descomentaste as linhas dos “and” da tabela turma?

Se descomentar as linhas referentes a tabela turma, vai pedir pra colocar esse campo no Group by, colocando o mesmo no group by a soma total de débito fica totalmente errada!!
Por isso que abrir o tópico perguntando se tem como colocar um campo no Select sem coloca-lo no group by…

Existe alguma função STRING que eu possa utilizar para tentar “Burlar” o SQLServer para não pedir a inclusão do campo no Group By ???

Se o campo da turma não estivesse no group by, tenho certeza que a consulta dava certo!!