none
Retornar Percentual RRS feed

  • Pergunta

  • Olá,

     

    Tenho a seguinte select:

    select sum(valor_venda) as TOTAL, categoria
    from venda
    group by categoria

     

    Retorna, por exemplo:
    2000,00  Peças
    3000,00  Gas
    1500,00  Pneus
    1500,00  Outros

     

    Gostaria que além do valor mostrado agrupado por categoria, ele mostre o percentual correspondente de cada categoria (em relação ao total de vendas):

    2000,00  Peças   20%
    3000,00  Gas     35%
    1500,00  Pneus   15%
    1500,00  Outros  15%
    ......

    Alguém pode me dar uma dica?

    [ ]´s

    terça-feira, 1 de abril de 2008 12:43

Respostas

  • veja se ajuda

     

    Create Table #Exemplo ( Peca Varchar(30), Valor Int)

    Insert into #Exemplo (Peca, Valor) Values ('Carro', 10)
    Insert into #Exemplo (Peca, Valor) Values ('Bola', 100)
    Insert into #Exemplo (Peca, Valor) Values ('Teclado', 150)

     
    Select Peca, Valor, Valor/Total
    From #Exemplo Inner Join (Select 1 Ref, Convert(numeric(19,4),Sum(Valor)) As Total From #Exemplo) Soma on Soma.Ref = 1

     

    Abs;

     

    terça-feira, 1 de abril de 2008 12:50
  • Bom Dia,

     

    Tente fazer o seguinte:

     

    Code Snippet

    CREATE TABLE #Pecas (VALOR NUMERIC(10,2), NOME VARCHAR(20))

     

    INSERT INTO #Pecas (VALOR, NOME) VALUES (2000,'Peças')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (3000,'Gas')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Pneus')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Outros')

     

    DECLARE @Total NUMERIC(10,2)

    SET @Total = (SELECT SUM(VALOR) FROM #Pecas)

     

    SELECT

    VALOR, NOME, (VALOR / @Total) AS PERC

    FROM

    #Pecas

     

     

    Se for 2005, existe outra solução.

     

    [ ]s,

     

    Gustavo

    terça-feira, 1 de abril de 2008 13:31
  • Olá Marcel,

     

    Nesse caso, você pode usufruir dos novos recursos. Tente o seguinte:

     

    Code Snippet

    CREATE TABLE #Pecas (VALOR NUMERIC(10,2), NOME VARCHAR(20))

     

    INSERT INTO #Pecas (VALOR, NOME) VALUES (2000,'Peças')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (3000,'Gas')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Pneus')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Outros')

     

    SELECT

    VALOR, NOME, (VALOR / SUM(VALOR) OVER (Partition By 1)) AS PERCENTUAL

    FROM #Pecas

     

    DROP TABLE #Pecas

     

     

    Não fiz o teste de qual alternativa seria mais performática (possivelmente a construção anterior). No caso do OVER as possibilidades são maiores.

     

    [ ]s,

     

    Gustavo

    sexta-feira, 4 de abril de 2008 18:31

Todas as Respostas

  • veja se ajuda

     

    Create Table #Exemplo ( Peca Varchar(30), Valor Int)

    Insert into #Exemplo (Peca, Valor) Values ('Carro', 10)
    Insert into #Exemplo (Peca, Valor) Values ('Bola', 100)
    Insert into #Exemplo (Peca, Valor) Values ('Teclado', 150)

     
    Select Peca, Valor, Valor/Total
    From #Exemplo Inner Join (Select 1 Ref, Convert(numeric(19,4),Sum(Valor)) As Total From #Exemplo) Soma on Soma.Ref = 1

     

    Abs;

     

    terça-feira, 1 de abril de 2008 12:50
  • Bom Dia,

     

    Tente fazer o seguinte:

     

    Code Snippet

    CREATE TABLE #Pecas (VALOR NUMERIC(10,2), NOME VARCHAR(20))

     

    INSERT INTO #Pecas (VALOR, NOME) VALUES (2000,'Peças')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (3000,'Gas')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Pneus')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Outros')

     

    DECLARE @Total NUMERIC(10,2)

    SET @Total = (SELECT SUM(VALOR) FROM #Pecas)

     

    SELECT

    VALOR, NOME, (VALOR / @Total) AS PERC

    FROM

    #Pecas

     

     

    Se for 2005, existe outra solução.

     

    [ ]s,

     

    Gustavo

    terça-feira, 1 de abril de 2008 13:31
  • Oi Gustavo, é versão 2005 sim!!

    sexta-feira, 4 de abril de 2008 18:15
  • Olá Marcel,

     

    Nesse caso, você pode usufruir dos novos recursos. Tente o seguinte:

     

    Code Snippet

    CREATE TABLE #Pecas (VALOR NUMERIC(10,2), NOME VARCHAR(20))

     

    INSERT INTO #Pecas (VALOR, NOME) VALUES (2000,'Peças')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (3000,'Gas')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Pneus')

    INSERT INTO #Pecas (VALOR, NOME) VALUES (1500,'Outros')

     

    SELECT

    VALOR, NOME, (VALOR / SUM(VALOR) OVER (Partition By 1)) AS PERCENTUAL

    FROM #Pecas

     

    DROP TABLE #Pecas

     

     

    Não fiz o teste de qual alternativa seria mais performática (possivelmente a construção anterior). No caso do OVER as possibilidades são maiores.

     

    [ ]s,

     

    Gustavo

    sexta-feira, 4 de abril de 2008 18:31