VinnarenMedlem sedan sep. 2005833 inlägg Har följande:
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
Anv MSSQL
Går detta o lösa??
Tacksam för all hjälp :stud
spangoMedlem sedan juni 20008 205 inlägg
Vinnaren skrev:
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.)
VinnarenMedlem sedan sep. 2005833 inlägg tack, ser ut att fungera kanon (y)