ALTER PROCEDURE dbo.GetRandomMember
(
@CityId int = 0,
@Name varchar(50) = null
)
AS
SELECT MemberId
FROM Member
WHERE (CityId = @CityId OR @CityId = 0)
AND ([Name] like '%'+@Name+'%' OR @Name is null)
AND Status = 1
ORDER BY Place DESC, [Name] ASC
Nu vill returnera en slumpad rad av resultatet som denna fråga ger.(är det möjligt att ju högre Place värde man har ju större chans ska det vara att man blir vald?)
Som frågan är nu returnerar den samma hela tiden. :OO
Nu vill returnera en slumpad rad av resultatet som denna fråga ger.(är det möjligt att ju högre Place värde man har ju större chans ska det vara att man blir vald?)
Någonting sånt här, kan det bli: SELECT TOP 1 * FROM grejen WHERE blahablaha ORDER BY Place * RAND(CAST(NEWID() AS VARBINARY)) DESC
Dvs, sortera resultatet på Place multiplicerat med ett slumpmässigt tal i intervallet [0..1). Större värden för Place kommer genomsnittligen få högre resultat av den uträkningen, men de kan lika väl få resultat 0. (Men om någon rad har Place <= 0 kommer den sannolikt aldrig att väljas, vilket förstås går att åtgärda med listiga subselects.)