Usuário com melhor resposta
Concatenar números em ordem decrescente.

Pergunta
-
Tenho cinco colunas com números (int), quero fazer um update/Set e colocar esses 5 numeros concatenados em ordem decrescente em uma outra coluna (concatenado).
C1 C2 C3 C4 C5 CONCATENADO
6 7 4 3 9 97643
1 2 3 5 3 53321
5 2 4 5 1 55421
3 2 4 3 3 43332
2 2 1 2 6 62221
5 1 1 4 4 54411agradeço antecipadamente
Fernando Fornarolo
- Editado Forna2015 quinta-feira, 30 de julho de 2015 15:59
Respostas
Todas as Respostas
-
-
José Diz,
Obrigado pela pronta resposta,mas minha tabela não tem chave primária e os números são de um só algarismo.
Se você puder levar em conta essas informações, o novato aqui agradece e muito.
Fernando Fornarolo
- Marcado como Resposta Forna2015 quinta-feira, 30 de julho de 2015 17:51
-
-
-
Eis outra abordagem, utilizando função para concatenar os algarismos.
Não me parece uma solução eficiente, mas funciona.
-- código 2 v2 CREATE FUNCTION dbo.ConcatenaValores (@C1 int, @C2 int, @C3 int, @C4 int, @C5 int) returns int as begin declare @Concatenado varchar(5); set @Concatenado= space(0); SELECT @Concatenado+= Cast(N as char(1))
from (values (@C1), (@C2), (@C3), (@C4), (@C5)) as Numeros(N)
order by N desc;
return Cast(@Concatenado as int); end;
go
e
-- código 3 UPDATE Tab set Concatenado= dbo.ConcatenaValores(C1, C2, C3, C4, C5);
José Diz Belo Horizonte, MG - Brasil
(Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)
José Diz,
Muito legal este exemplo, o pulo do gato é justamente o uso da função Space().
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Boa tarde,
Estava tudo certo, mas quando juntei tudo, apresentou mensagem de Erro:
--- ORDENAR LINHAS
CREATE FUNCTION dbo.ordeliValores (@l1 int, @l2 int, @l3 int, @l4 int, @l5 int)
returns int as
begin
declare @ordelinha int;
set @ordelinha= space(0);
SELECT @ordelinha+= Cast(N as char(1))
from (values (@l1), (@l2), (@l3), (@l4), (@l5)) as Numeros(N)
order by N desc;
return Cast(@ordelinha as int);
end;
go
UPDATE jogo
set ordelinha= dbo.ordeliValores(l1, l2, l3, l4, l5);*********************************************************
após executar o passo acima:
Mensagem 111, Nível 15, Estado 1, Linha 2
'CREATE FUNCTION' deve ser a primeira instrução em um lote de consultas.
Mensagem 137, Nível 15, Estado 2, Linha 9
É necessário declarar a variável escalar "@l1".
Mensagem 178, Nível 15, Estado 1, Linha 11
Uma instrução RETURN com um valor retornado não pode ser usada neste contexto.**************************************************************************
novamente solicito ajuda
Fernando Fornarolo
-
Boa noite,
Fernando, experimente mais ou menos dessa forma:
with CTE_Conc as ( select *, (SELECT CAST(C AS VARCHAR(10)) FROM (VALUES (t.C1), (t.C2), (t.C3), (t.C4), (t.C5)) as v(C) ORDER BY C DESC FOR XML PATH(''), TYPE).value('.', 'varchar(max)') AS ConcXML from Tabela as t ) update CTE_Conc set CONCATENADO = CAST(ConcXML AS INT)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Boa Tarde, José Diz
Voltando na questão ordenar decrescente apresentou a seguinte mensagem erro:
Mensagem 111, Nível 15, Estado 1, Linha 3
'CREATE FUNCTION' deve ser a primeira instrução em um lote de consultas.
Mensagem 137, Nível 15, Estado 2, Linha 10
É necessário declarar a variável escalar "@l1".
Mensagem 178, Nível 15, Estado 1, Linha 12
Uma instrução RETURN com um valor retornado não pode ser usada neste contexto.Novamente o que esta errado, tem como fazer sem usar Function?
Se você puder me ajudar novamente, ficaria muito grato.
Obrigago
Fernando//
-
Fernando, a sugestão que postei acima não utiliza uma função.
Assinatura: http://www.imoveisemexposicao.com.br
-