Usuário com melhor resposta
Query com COUNT/SUM alguem ajuda?

Pergunta
-
Fiz uma consulta usando o COUNT que me retornou os seguintes resultados
TESTE | NOTA|
TES | NULL
TES | NULL
TES | NULL
TES | 1
TES | 1
TES | 1
Preciso de algo do tipo:
TESTE | NOTA
TEST | 3
ja tentei group by mais nao funcionou ... alguem tem outra solução?
Respostas
-
Experimente desta forma:
SELECT ALUNO.NOME, HISTORICO.NOTA, MATERIA.NOME, SUM(CASE WHEN NOTA < 60 THEN 1 ELSE 0 END) AS 'TESTE' FROM HISTORICO, MATERIA, ALUNO WHERE HISTORICO.CODIGOMATERIA = MATERIA.CODIGOMATERIA AND HISTORICO.CODIGONOTA = ALUNO.CODIGONOTA AND ALUNO.CODIGO = '123456' GROUP BY ALUNO.NOME, HISTORICO.NOTA, MATERIA.NOME WITH ROLLUP HAVING GROUPING(HISTORICO.NOTA) = GROUPING(MATERIA.NOME)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Ovatsug Abreu quinta-feira, 24 de janeiro de 2013 16:49
Todas as Respostas
-
Bom dia Abreu,
Veja se este exemplo te ajuda:
Declare @tabela table (teste varchar(10), valor int) insert into @tabela (teste, valor) values ('TESTE', null) insert into @tabela (teste, valor) values ('TESTE', null) insert into @tabela (teste, valor) values ('TESTE', null) insert into @tabela (teste, valor) values ('TESTE', 1) insert into @tabela (teste, valor) values ('TESTE', 1) insert into @tabela (teste, valor) values ('TESTE', 1) insert into @tabela (teste, valor) values ('TESTE', null) --Mostrar quantidade de ocorrencias de um certo valor select teste, valor, count(*) as Qt from @tabela --where valor = 1 group by teste, valor
At.
Rafael -
Bom dia,
Experimente desta forma:
select Teste, Count(Nota) as Nota from MinhaTabela group by Teste
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
-
-
Minha consulta foi isso:
SELECT ALUNO.NOME, HISTORICO.NOTA, MATERIA.NOME, CASE WHEN (NOTA)<60 THEN COUNT(NOTA) END AS 'TESTE' FROM HISTORICO, MATERIA, ALUNO WHERE HISTORICO.CODIGOMATERIA = MATERIA.CODIGOMATERIA AND HISTORICO.CODIGONOTA = ALUNO.CODIGONOTA AND ALUNO.CODIGO = '123456' GROUP BY ALUNO.NOME,HISTORICO.NOTA,MATERIA.NOME ORDER BY 4
Meu resultado foi isso:
NOME NOTA MATERIA TESTE joao 50 A NULL joao 60 B NULL joao 52 C 1 joao 40 D 1 joao 25 E 1
Gostaria agora de fazer um case ou algo que após este resultado me mostrasse isso:
NOME NOTA MATERIA TESTE joao NULL NULL 3
Alguem me ajuda?
-
-
-
-
-
Veja se te ajuda em algo
DECLARE @TABLE TABLE (NOME VARCHAR(10), NOTA INT, MATERIA CHAR(1), TESTE INT) INSERT INTO @TABLE (NOME, NOTA, MATERIA, TESTE) VALUES ('joao', 50, 'A', NULL) INSERT INTO @TABLE (NOME, NOTA, MATERIA, TESTE) VALUES ('joao', 60, 'B', NULL) INSERT INTO @TABLE (NOME, NOTA, MATERIA, TESTE) VALUES ('joao', 52, 'C', 1) INSERT INTO @TABLE (NOME, NOTA, MATERIA, TESTE) VALUES ('joao', 40, 'D', 1) INSERT INTO @TABLE (NOME, NOTA, MATERIA, TESTE) VALUES ('joao', 25, 'E', 1) SELECT NOME, NOTA, MATERIA, TESTE FROM @TABLE UNION SELECT NOME AS NOME, NULL AS NOTA, NULL AS MATERIA, SUM(TESTE) FROM @TABLE GROUP BY NOME ORDER BY TESTE
A ideia é separar os dois resutados em selects diferentes, e depois junta-los através do union
At.
Rafael -
-
Experimente desta forma:
SELECT ALUNO.NOME, HISTORICO.NOTA, MATERIA.NOME, SUM(CASE WHEN NOTA < 60 THEN 1 ELSE 0 END) AS 'TESTE' FROM HISTORICO, MATERIA, ALUNO WHERE HISTORICO.CODIGOMATERIA = MATERIA.CODIGOMATERIA AND HISTORICO.CODIGONOTA = ALUNO.CODIGONOTA AND ALUNO.CODIGO = '123456' GROUP BY ALUNO.NOME, HISTORICO.NOTA, MATERIA.NOME WITH ROLLUP HAVING GROUPING(HISTORICO.NOTA) = GROUPING(MATERIA.NOME)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Ovatsug Abreu quinta-feira, 24 de janeiro de 2013 16:49
-
Não entendi direito... você pode postar o resultado obtido com a query que sugeri e como seria o resultado desejado?
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Ovatsug Abreu quinta-feira, 24 de janeiro de 2013 16:48
- Não Marcado como Resposta Ovatsug Abreu quinta-feira, 24 de janeiro de 2013 16:49
-
Experimente desta forma:
SELECT ALUNO.NOME, HISTORICO.NOTA, MATERIA.NOME, SUM(CASE WHEN NOTA < 60 THEN 1 ELSE 0 END) AS 'TESTE' FROM HISTORICO, MATERIA, ALUNO WHERE HISTORICO.CODIGOMATERIA = MATERIA.CODIGOMATERIA AND HISTORICO.CODIGONOTA = ALUNO.CODIGONOTA AND ALUNO.CODIGO = '123456' GROUP BY ALUNO.NOME, HISTORICO.NOTA, MATERIA.NOME WITH ROLLUP HAVING GROUPING(HISTORICO.NOTA) = GROUPING(MATERIA.NOME)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
melhor encerrar por aqui,esse foi o mais perto que consegui acho que nao passa disso D: brigado ai