Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Proprietario Veiculo
Vinicius uno
Vinicius palio
Vinicius gol
Thiago celta
Thiago fox
Rodrigo i30
Boa tarde, gostaria de saber como randomizar 1 registro por Proprietario.
Exemplo de resultado:
Proprietario Veiculo
Vinicius uno
Thiago celta
Rodrigo i30
Como faço isso no SQL Server?
não tenho a saída...
usando o newid() + o top (valor) randomizo por todos registros da tabela. Gostaria apenas de randomizar por proprietário.
Select prop, veic,max(newid()) x
From tabela
Group by prop,veic
Nao twnho como testar
Testei aqui e a função max com o newid não funciona.
Erro:
Mensagem 8117, Nível 16, Estado 1, Linha 1
Operand data type uniqueidentifier is invalid for max operator.
faz uma tabela virtual
select prop, veic, max(x)
from
(
Select prop, veic,newid() x
From tabela
) virtual
group by prop, veic
Motta, o mesmo erro:
"Operand data type uniqueidentifier is invalid for max operator."
Pelo visto o SQl Server não permite que seja coluna virtual.
Tentou com rand() ?
select prop, veic, max(r)
from ( Select prop, veic,rand() r
From tabela ) virtual
group by prop, veicVeja a solução que encontrei:
with CTE_RN as
(
select
prop, veic,
ROW_NUMBER() OVER(PARTITION BY prop ORDER BY prop,newid()) as RN,select * from CTE_RN
where RN<=3Agora preciso do seguinte:
Exemplo:
Proprietario Veiculo Marca
Vinicius uno fiat
Vinicius palio fiat
Vinicius gol vw
Vinicius celta gm
Rodrigo uno fiat
Rodrigo jeta vw
Rodrigo sonic gm
Minha seleção deve ser aleatória da seguinte maneira:
Proprietario Veiculo Marca
Vinicius uno fiat
Vinicius palio fiat
Vinicius gol vw
Rodrigo uno fiat
Rodrigo jeta vw
Rodrigo sonic gm
tentou uma combinação , tipo ...
with CTE_WM as
(
select
prop, veic,
ROW_NUMBER() OVER(PARTITION BY prop ORDER BY prop,newid()) as RN, WHERE MARCA = 'WM'
)
with CTE_NWM as
(
select
prop, veic,
ROW_NUMBER() OVER(PARTITION BY prop ORDER BY prop,newid()) as RN, WHERE MARCA <> 'WM'
)
select * from CTE_WM
where RN<=1select * from CTE_NWM
where RN<=2
se vc jah tiver a saida, de um order by newid() no final.