webForumDet fria alternativet

returnera slumpad rad

2 svar · 538 visningar · startad av Vinnaren

VinnarenMedlem sedan sep. 2005833 inlägg
#1

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
#2

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
#3

tack, ser ut att fungera kanon (y)

132 ms totalt · 3 externa anrop · v20260731065814-full.16f3d68c
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)