none
Somar no SQL RRS feed

  • Pergunta

  • Olá conseui atraves de post daqui sobre Consulta Sql,

    Obrigado Consegui Fazer o que estava pensando....

     

    ;with Base as 

     

    ( select depositante_deposito , cod_processo,valor_deposito ,data_vencimento_deposito,guia_deposito ,id_deposito ,cod_mandado,cod_guia_deposito , row_number() over  (partition by depositante_deposito order by depositante_deposito,cod_processo) numerador 

     

    ,row_number() over  (partition by cod_processo order by cod_processo,depositante_deposito)numerador2 from deposito ) 

     

    select case when numerador =1 then depositante_deposito else '' end as Nome,

     

      case when numerador2 =1 then cod_processo  else '' end as cod_processo,valor_deposito ,data_vencimento_deposito,guia_deposito ,id_deposito ,cod_mandado,cod_guia_deposito  from Base

     

     

    consegui o resultado que eu gostaria porem surgiu a necessidade de somar os campos Valor_deposito por cada tipo de deposito depositante

    ex:

    Deposito_depositante   Valor

    ASD                               100,00

                                         100,00

                                         200,00   

    FASD                             50,00

                                         55,00     

                                         105,00


    Wesley Sozua
    segunda-feira, 30 de janeiro de 2012 16:23

Respostas

  • Wesley

    segue um exemplo

    declare @tbTeste as table (nome varchar(20), data datetime, valor decimal (5,2))
    insert into @tbTeste values ('C3PO', '20120101',100),('C3PO', '20120201',100),('C3PO', '20120301',15.5)
    insert into @tbTeste values ('R2D2', '20120101',50),('R2D2', '20120201',55)
    
    ;with cte_dados1
    as
    (
    select nome, data, sum(valor) as valor
    from @tbTeste
    group by rollup( nome, data)
    ), cte_dados2 as 
        (
        select *, row_number() over  (partition by nome order by nome,valor asc) numerador
        from cte_dados1 WHERE nome is not null
        )
    select case when numerador =1 then nome else '' end as Nome, data, valor
    from cte_dados2
    


     


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    segunda-feira, 30 de janeiro de 2012 18:54
    Moderador
  • Wesley

    vc tem uma coluna com sum mas nao deu o nome para a coluna, na CTE todas as colunas devem ter um nome

    outro ponto na primeira cte vc cria a cte base selecionando os dados da tabela deposito e na segunda cte vc cria a cte deposito selecionando os dados da cte base

    isto pode gerar algum conflito no sql ou ainda prejudicar o entendimento de um outro analista ao dar a manutenção tente dar nome para cte com o prefixo cte_xxx

    ;with cte_Base
    as
    (
    select depositante_deposito , data_vencimento_deposito , sum(valor_deposito ) as valor
    from deposito 
    group by rollup( depositante_deposito , data_vencimento_deposito )
    ), cte_deposito as 
        (
        select *, row_number() over  (partition by depositante_deposito order by depositante_deposito,valor_depositante asc)numerador
        from Base  WHERE depositante_deposito  is not null
        )
    select case when numerador =1 then depositante_deposito  else '' end as depositante_deposio, data_vencimento_deposito 
    from cte_deposito  
    

     


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta WesSouza terça-feira, 31 de janeiro de 2012 15:40
    terça-feira, 31 de janeiro de 2012 14:04
    Moderador

Todas as Respostas

  • Wesley

    segue um exemplo

    declare @tbTeste as table (nome varchar(20), data datetime, valor decimal (5,2))
    insert into @tbTeste values ('C3PO', '20120101',100),('C3PO', '20120201',100),('C3PO', '20120301',15.5)
    insert into @tbTeste values ('R2D2', '20120101',50),('R2D2', '20120201',55)
    
    ;with cte_dados1
    as
    (
    select nome, data, sum(valor) as valor
    from @tbTeste
    group by rollup( nome, data)
    ), cte_dados2 as 
        (
        select *, row_number() over  (partition by nome order by nome,valor asc) numerador
        from cte_dados1 WHERE nome is not null
        )
    select case when numerador =1 then nome else '' end as Nome, data, valor
    from cte_dados2
    


     


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    segunda-feira, 30 de janeiro de 2012 18:54
    Moderador
  • Olá obrigado pela Ajuda!

    Me desculpe a ignorancia mas tem um erro que não consigo entender!

    ;with Base

    as

    (

    select depositante_deposito , data_vencimento_deposito , sum(valor_deposito )

    from deposito 

    group by rollup( depositante_deposito , data_vencimento_deposito )

    ), deposito as 

        (

        select *, row_number() over  (partition by depositante_deposito order by depositante_deposito,valor_depositante asc)numerador

        from Base  WHERE depositante_deposito  is not null

        )

    select case when numerador =1 then depositante_deposito  else '' end as depositante_deposio, data_vencimento_deposito 

    from deposito  

     

    Mensagem 8155, Nível 16, Estado 2, Linha 1

    Nenhum nome de coluna especificado para a coluna 3 de 'Base'. 


    Wesley Sozua
    • Editado WesSouza terça-feira, 31 de janeiro de 2012 13:37 nada
    terça-feira, 31 de janeiro de 2012 13:37
  • Wesley

    vc tem uma coluna com sum mas nao deu o nome para a coluna, na CTE todas as colunas devem ter um nome

    outro ponto na primeira cte vc cria a cte base selecionando os dados da tabela deposito e na segunda cte vc cria a cte deposito selecionando os dados da cte base

    isto pode gerar algum conflito no sql ou ainda prejudicar o entendimento de um outro analista ao dar a manutenção tente dar nome para cte com o prefixo cte_xxx

    ;with cte_Base
    as
    (
    select depositante_deposito , data_vencimento_deposito , sum(valor_deposito ) as valor
    from deposito 
    group by rollup( depositante_deposito , data_vencimento_deposito )
    ), cte_deposito as 
        (
        select *, row_number() over  (partition by depositante_deposito order by depositante_deposito,valor_depositante asc)numerador
        from Base  WHERE depositante_deposito  is not null
        )
    select case when numerador =1 then depositante_deposito  else '' end as depositante_deposio, data_vencimento_deposito 
    from cte_deposito  
    

     


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta WesSouza terça-feira, 31 de janeiro de 2012 15:40
    terça-feira, 31 de janeiro de 2012 14:04
    Moderador
  • Tudo bem Marcelo?

    Então , apesar de Todas as sua Dicas , ainda estou com dificuldades em fazer o que preciso,

    tenho muita quantidade de campo , que talves me atrapalhe. Gostaria de fazer igual o da imagem.

     

    Eu preciso que a cada nome diferente exiba a soma do valor_deposito, e continuar não repetindo informações iguais, porem no campo de valores não é necessario fazer isso.

    Obrigado pela Atenção!

    ;with Base as 

     

    ( select depositante_deposito , cod_processo,valor_deposito ,data_vencimento_deposito,guia_deposito ,id_deposito ,cod_mandado,cod_guia_deposito , row_number() over  (partition by depositante_deposito order by depositante_deposito,cod_processo) numerador 

     

    ,row_number() over  (partition by cod_processo order by cod_processo,depositante_deposito)numerador2 from deposito ) 

     

    select case when numerador =1 then depositante_deposito else '' end as Nome,

     

      case when numerador2 =1 then cod_processo  else '' end as cod_processo,valor_deposito ,data_vencimento_deposito,guia_deposito ,id_deposito ,cod_mandado,cod_guia_deposito  from Base

     


    Wesley Sozua
    • Editado WesSouza quarta-feira, 1 de fevereiro de 2012 12:46 nada
    quarta-feira, 1 de fevereiro de 2012 12:45