none
Query com COUNT/SUM alguem ajuda? RRS feed

  • 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?

    quinta-feira, 24 de janeiro de 2013 11:04

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
    quinta-feira, 24 de janeiro de 2013 14:04

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

    quinta-feira, 24 de janeiro de 2013 11:13
  • 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

    quinta-feira, 24 de janeiro de 2013 12:02
  • Não vai da certo porque eu fiz exatamente isso pra me retornar os resultados =/

    preciso de algo do tipo

    caso o valor do count for igual a 1 entao me retorne a soma da quantidade de 1 que apareceu

    quinta-feira, 24 de janeiro de 2013 12:06
  • Olá,

    Talvez seria interessante voce postar o seu select, a estrutura de sua tabela, para termos uma idéia do resultado....

    At.
    Rafael

    quinta-feira, 24 de janeiro de 2013 12:14
  • 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?

                
    quinta-feira, 24 de janeiro de 2013 12:37
  • Qual versão do SQL Server você está utilizando?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 24 de janeiro de 2013 12:48
  • sql server 2005
    quinta-feira, 24 de janeiro de 2013 12:50
  • No resultado esperado, o TESTE=3, refere-se a quantidade de ocorrencia do número 1? Caso sim, sempre será o número 1?  Ou se for <> de nulo?

    At.
    Rafael

    quinta-feira, 24 de janeiro de 2013 12:58
  • Sempre será o número 1
    quinta-feira, 24 de janeiro de 2013 13:00
  • 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

    quinta-feira, 24 de janeiro de 2013 13:12
  • Ainda não :(

    ta complicado faz tres dias que to garrado nessa consulta

    quinta-feira, 24 de janeiro de 2013 13:23
  • 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
    quinta-feira, 24 de janeiro de 2013 14:04
  • 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
    quinta-feira, 24 de janeiro de 2013 16:26
  • 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
    quinta-feira, 24 de janeiro de 2013 16:49