none
Converter e somar dados de uma coluna RRS feed

  • Pergunta

  • Olá pessoal, 

    Estou com um problema .. Tenho dados em uma coluna que são salvos por ponto e virgula. 

    Esses dados vão possuir uma pontuação. Ex: AA1 vale 1, AA2 vale = 5, AA4 = 10 e assim por diante. 

    Quero pegar esses dados e somar eles em outra coluna atribuindo uma pontuação ...  Como se fosse uma coluna computada. Como posso fazer isso ? 

    Ex 

    ID     DADOS    PONTUACAO

    1        AA1  1 

    2        AA1; AA2     6  

    3        AA2; AA4     15

    4        AA4             10 




    • Editado Pedro Xavier terça-feira, 16 de abril de 2013 18:32
    terça-feira, 16 de abril de 2013 18:24

Respostas

  • Deleted
    • Marcado como Resposta Pedro Xavier terça-feira, 16 de abril de 2013 19:50
    terça-feira, 16 de abril de 2013 19:16
  • Segue um script para teste:

    declare @Dados table
    (Dado varchar(10), Pontos int);
    
    insert into @Dados (Dado, Pontos) values
    ('AA1', 1),
    ('AA2', 5),
    ('AA4', 10);
    
    declare @Pontuacao table
    (ID int, Dados varchar(100));
    
    insert into @Pontuacao (ID, Dados) values
    (1, 'AA1'), 
    (2, 'AA1; AA2'),
    (3, 'AA2; AA4'),
    (4, 'AA4');
    
    SELECT 
        F1.ID,
        F1.Dados,
        SUM(d.Pontos) as Pontuacao
    FROM
    (
         SELECT 
             ID,
             Dados,
             cast('<X>' + replace(Dados, '; ', '</X><X>') + '</X>' as XML) as xmlfilter 
         from @Pontuacao 
    ) F1
    CROSS APPLY
    ( 
         SELECT 
             fdata.D.value('.', 'varchar(50)') as Dado 
         FROM f1.xmlfilter.nodes('X') as fdata(D)
    ) O
    INNER JOIN @Dados as d
        on d.Dado = o.Dado
    group by 
        F1.ID, 
        F1.Dados

    Espero que ajude.


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

    • Marcado como Resposta Pedro Xavier terça-feira, 16 de abril de 2013 19:50
    terça-feira, 16 de abril de 2013 19:36

Todas as Respostas

  • Olá Pedro boa tarde,

    Não entendi muito bem, a sua coluna dados tem as informações AA1, AA2, AA3 .... 

    Você quer gerar uma segunda coluna chamada Pontuação, com a soma dos valores referentes a AA1, AA2 ....

    Isso mesmo?

    Muito obrigado


    Wellinghton Pimentel Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 16 de abril de 2013 18:37
  • Isso mesmo ... 


    terça-feira, 16 de abril de 2013 18:40
  • Boa tarde,

    Pedro, existe uma tabela que contenha quantos pontos vale cada dado? Ex:

    Dado / Ponto

    AA1 / 1

    AA2 / 5

    AA4 / 10

    etc...

    Se não existe essa tabela, existe a possibilidade de cria-la?


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

    terça-feira, 16 de abril de 2013 18:56
  • Não existe ... Mas tenho a possibilidade de criar sim. 
    terça-feira, 16 de abril de 2013 19:04
  • Deleted
    • Marcado como Resposta Pedro Xavier terça-feira, 16 de abril de 2013 19:50
    terça-feira, 16 de abril de 2013 19:16
  • Segue um script para teste:

    declare @Dados table
    (Dado varchar(10), Pontos int);
    
    insert into @Dados (Dado, Pontos) values
    ('AA1', 1),
    ('AA2', 5),
    ('AA4', 10);
    
    declare @Pontuacao table
    (ID int, Dados varchar(100));
    
    insert into @Pontuacao (ID, Dados) values
    (1, 'AA1'), 
    (2, 'AA1; AA2'),
    (3, 'AA2; AA4'),
    (4, 'AA4');
    
    SELECT 
        F1.ID,
        F1.Dados,
        SUM(d.Pontos) as Pontuacao
    FROM
    (
         SELECT 
             ID,
             Dados,
             cast('<X>' + replace(Dados, '; ', '</X><X>') + '</X>' as XML) as xmlfilter 
         from @Pontuacao 
    ) F1
    CROSS APPLY
    ( 
         SELECT 
             fdata.D.value('.', 'varchar(50)') as Dado 
         FROM f1.xmlfilter.nodes('X') as fdata(D)
    ) O
    INNER JOIN @Dados as d
        on d.Dado = o.Dado
    group by 
        F1.ID, 
        F1.Dados

    Espero que ajude.


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

    • Marcado como Resposta Pedro Xavier terça-feira, 16 de abril de 2013 19:50
    terça-feira, 16 de abril de 2013 19:36
  • José Diniz e gapinmex ... 

    Fora do sério a query de vocês dois ... Me ajudou e muito ! 

    É exatamente disso que eu precisava :)

    terça-feira, 16 de abril de 2013 19:50