Hur gör man för att med en enda SQL-sats skapa ett resultset med t ex 10 st slumpade tal? Det är allstå inte slumpandet som är problemet utan hur man skapar en lista med talen (utan att använda en loop eller temptabell) så att jag kan joina mot denna. Gärna SQL2005-syntax om det hjälper...går det? Borde fungera med: Johan: Jag testade och det fungerar när det skiljer mycket mellan talen man stoppar in (jag multilicerade talen 10-20 med 10000).Generera resultset med 10 slumpade tal
Skapa ett slumptal är ju enkelt :
<code>
select floor(rand()*100)
</code>
Som ett exempel kan jag ju nämna att jag testade mest för skojs skull att köra så här
<code>
select top 10 floor(rand()*100) as random from [mytable]
</code>
där MyTable är en valfri tabell med minst 10 poster, och visst fick jag tio rader, men alla innehåller alltid samma slumptal så RAND() körs bara en gång.
Det här är säkert jätteenkelt, möjligen på gränsen till pinsamt enkelt :-)Sv: Generera resultset med 10 slumpade tal
select top 10 floor(rand(mytable.unikt_fält_i_mytable)*100) as random from [mytable]
Kanske även kan fungera med:
select floor(rand()*100)
union all select floor(rand()*100)
union all select floor(rand()*100)
osv
/JohanSv:Generera resultset med 10 slumpade tal
Första exemplet ger samma resultat som mitt tidigare, nämligen en lista med tio tal (korrekt) men alla tal är identiska.
Andra exemplet fungerar inte, eftersom siffran 10 var tagen ut luften, man måste kunna välja hur många slumptal som skall skapas. Jag glömde nämna det i förutsättningarna, sorry...Sv: Generera resultset med 10 slumpade tal
MEN, jag läste sedan dokumentationen och såg att ett visst tal man använder som seed till rand alltid ger samma resultat, så det är ingen bra lösning. Det går givetvis att komma runt genom att multiplicera med rand() eller t.ex. tiden då frågan körs, men det känns inte helt perfekt. Så tyvärr har jag ingen bra lösning.
/Johan