none
Dividir dados de uma Tabela relacionados a outra tabela com critérios RRS feed

  • Pergunta

  • Possuo 2 tabelas na seguinte estrutura

    <style type="text/css"><!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}--></style>
    TABELA 1 TABELA 2
    VERBA VALOR $ CARGO VERBA QTD PESSOAS CARGO
    INSS 5000 AJUDANTE SALÁRIO 3 AJUDANTE
    VR 600 AJUDANTE
    SALÁRIO 12000 AJUDANTE

    Preciso trazer a média por função do total de pessoas que possuem naquele cargo, entretanto a verba associada na tabela 2 é somente salário, quando faço a divisão a média acontece somente para a média de salário e os demais fatores ficam zerados.

    Existe a possibilidade de replicar os valor da tabela 2 para os demais campos da tabela 1 para realizar a divisão ? ou no momento de dividir colocar um critério da verba ?

    Resultado Atual

    <style type="text/css"><!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}--></style>
    RESULTADO FINAL
    VERBA MÉDIA CARGO
    INSS 0 AJUDANTE
    VR 0 AJUDANTE
    SALÁRIO 4000 AJUDANTE

     Resultado que quero obter

    <style type="text/css"><!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}--></style>
    RESULTADO FINAL
    VERBA MÉDIA CARGO
    INSS 1667 AJUDANTE
    VR 200 AJUDANTE
    SALÁRIO 4000 AJUDANTE

    por gentileza alguém pode ajudar ?

    quinta-feira, 22 de junho de 2017 01:50

Respostas

  • Boa noite,

    Não entendi por que existe o campo verba na tabela 2. No caso um join só pelo cargo já não resolveria?

    SELECT TAB1.VERBA,VALOR / QTD , TAB1.CARGO  FROM TAB1
    JOIN TAB2 ON TAB1.CARGO = TAB2.CARGO 
    


    &quot;computadores fazem arte, artistas fazem dinheiro&quot;

    quinta-feira, 22 de junho de 2017 21:15

Todas as Respostas

  • Boa noite,

    Experimente mais ou menos dessa forma:

    select
        t1.Verba,
        t1.Valor /
        coalesce
            ((select top(1) t2.QtdPessoas from Tabela2 as t2 
              where t2.Cargo = t1.Cargo and t2.Verba = t1.Verba),
             (select top(1) t2.QtdPessoas from Tabela2 as t2 
              where t2.Cargo = t1.Cargo)) as Media,
        t1.Cargo
    from Tabela1 as t1

    Espero que ajude


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


    quinta-feira, 22 de junho de 2017 02:22
  • Seque uma outra abordagem 

    DECLARE @Tabela1 TABLE
    (
     Verba VARCHAR(10) NOT NULL,
     Valor DECIMAL(18,2),
     Cargo VARCHAR(30)
    )
    
    DECLARE @Tabela2 TABLE
    (
     Verba VARCHAR(10) NOT NULL,
     QuantiPessoas INT,
     Cargo VARCHAR(30)
    )
    
    INSERT INTO @Tabela1
            ( Verba, Valor, Cargo )
    VALUES  ( 'INSS',5000,'AJUDANTE' ),( 'VR',600,'AJUDANTE' ),( 'SALÁRIO',12000,'AJUDANTE' )
    
    INSERT INTO @Tabela2
            ( Verba, QuantiPessoas, Cargo )
    VALUES  ( 'VERBA', 3, 'AJUDANTE' );
    
    
    
    WITH Dados AS (
     SELECT T.Verba ,
            T.Valor ,
            T.Cargo,
    		QuantPessoa.QuantiPessoas FROM @Tabela1 AS T
    		CROSS APPLY (
    		 SELECT TOP 1 T2.QuantiPessoas FROM @Tabela2 AS T2
    		 WHERE T2.Cargo = T.Cargo
    		) QuantPessoa
    )
    SELECT R.Verba ,
           R.Valor ,
           R.Cargo ,
           R.QuantiPessoas,
    	   Media = CAST((R.Valor / R.QuantiPessoas) AS DECIMAL(18,2) ) FROM Dados R
    
    

    Wesley Neves
    wesley.si.neves@gmail.com
    Brasilia-DF
    MTA-SQL Server
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"


    Wesley Neves

    quinta-feira, 22 de junho de 2017 11:25
  • Boa noite,

    Não entendi por que existe o campo verba na tabela 2. No caso um join só pelo cargo já não resolveria?

    SELECT TAB1.VERBA,VALOR / QTD , TAB1.CARGO  FROM TAB1
    JOIN TAB2 ON TAB1.CARGO = TAB2.CARGO 
    


    &quot;computadores fazem arte, artistas fazem dinheiro&quot;

    quinta-feira, 22 de junho de 2017 21:15
  • Bom dia,

    Por falta de retorno esta thread esta encerrada !

    Por gentileza, caso necessário abra uma nova thread.

    Atenciosamente,


    Guilherme Macedo S

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 26 de junho de 2017 13:02