Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lealdouglas5

Criar tabelas randomicamente

Recommended Posts

Olá amigos sou novo no que se diz respeito a programação em SQL Server.

Mas minha duvida é a seguinte.

Tenho uma tabela contendo 25 registro de nomes de pessoas. Porem preciso dividi-la em 5 grupos de 5 pessoas aleatoriamente. Isso é possível? Andei pesquisando e encontrei uma função chamada Rand() ela se encaixa nessa minha duvida?

Obrigado pessoal, qualquer ajuda é muito bem vinda =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou num tablet fica difícil editar uma query , mas ...

 

Use o rand() para ordenar de forma aleatória e use o row_number para separar em grupos de 5 , dividindo a row_number por 5 e dando um trunc se gera um número que ordena o grupo.

 

Deve ter ficado meio confuso mais espero ter ajudado, se for o caso amanhã tento montar o sql.

 

 

http://msdn.microsoft.com/pt-br/library/ee634907.aspx

 

http://forum.imasters.com.br/topic/409950-resolvidoconsulta-sql-rand-nome/

 

http://estudandopara70433.wordpress.com/2011/07/02/lio-3-aplicando-funes-de-rank/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou num tablet fica difícil editar uma query , mas ...

 

Use o rand() para ordenar de forma aleatória e use o row_number para separar em grupos de 5 , dividindo a row_number por 5 e dando um trunc se gera um número que ordena o grupo.

 

Deve ter ficado meio confuso mais espero ter ajudado, se for o caso amanhã tento montar o sql.

 

 

http://msdn.microsoft.com/pt-br/library/ee634907.aspx

 

http://forum.imasters.com.br/topic/409950-resolvidoconsulta-sql-rand-nome/

 

http://estudandopara70433.wordpress.com/2011/07/02/lio-3-aplicando-funes-de-rank/

 

Muito obrigado pela ajuda !

Quando eu usar uma o Rand() ele ira criar as tabelas ou apenas dividir a mesma, ou ordenar?

Gostaria que ele criasse as 5 tabelas com 5 membros aleatórios em cada =s. É muito difícil?

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criar as tabelas ou apenas separar no select !?

 

Criar 5 tabelas é um complicador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criar as tabelas ou apenas separar no select !?

 

Criar 5 tabelas é um complicador.

Então, seria criar 5 tabelas... Porque eu preciso, por exemplo, que as 5 pessoas aleatórias vão para a tabela 'Grupo A', outras 5 do 'Grupo B' e assim por diante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se conseguiu fazer, mas segue um exemplo bem simples...

Da pra se fazer com CTE, WHILE, RAND, ROW_NUMBER, e por ai vai.

set nocount on

-- TABELAS
declare @table table (id int identity(1,1), nome varchar(max))
declare @table_range01 table (id int, nome varchar(max), [range] varchar(10))
declare @table_range02 table (id int, nome varchar(max), [range] varchar(10))
declare @table_range03 table (id int, nome varchar(max), [range] varchar(10))
declare @table_range04 table (id int, nome varchar(max), [range] varchar(10))
declare @table_range05 table (id int, nome varchar(max), [range] varchar(10))

-- VARIAVEIS
declare @sql varchar(max)
declare @nome varchar(max)
DECLARE @qtde int

set @qtde = 25
while @qtde > 0
begin
set @nome = 'nome'+CONVERT(varchar(10),@qtde)
insert into @table select @nome
exec (@sql)
set @qtde = @qtde - 1
end

-- PRIMEIRO RANGE DE 5 NOMES ALEATORIOS
insert into @table_range01 
select top 5 id, nome,'range01' from @table order by NEWID()
delete from @table where id in (select id from @table_range01)

-- SEGUNDO RANGE DE NOME ALEATORIOS QUE NAO ESTAO NO PRIMEIRO RANGE
insert into @table_range02
select top 5 id, nome,'range02' from @table order by NEWID()
delete from @table where id in (select id from @table_range02)

-- SEGUNDO RANGE DE NOME ALEATORIOS QUE NAO ESTAO NO PRIMEIRO RANGE
insert into @table_range03
select top 5 id, nome,'range03' from @table order by NEWID()
delete from @table where id in (select id from @table_range03)

-- SEGUNDO RANGE DE NOME ALEATORIOS QUE NAO ESTAO NO PRIMEIRO RANGE
insert into @table_range04
select top 5 id, nome,'range04' from @table order by NEWID()
delete from @table where id in (select id from @table_range04)

-- SEGUNDO RANGE DE NOME ALEATORIOS QUE NAO ESTAO NO PRIMEIRO RANGE
insert into @table_range05
select top 5 id, nome,'range05' from @table order by NEWID()
delete from @table where id in (select id from @table_range05)


select * from @table_range01 union 
select * from @table_range02 union 
select * from @table_range03 union 
select * from @table_range04 union 
select * from @table_range05

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.