2008-12-16 3 views
0

Voici ma question:Comment puis-je modifier ceci pour obtenir un enregistrement aléatoire sur la fin d'une jointure?

Je voudrais un enregistrement au hasard de ma table de CaseStudyImage qui correspond à l'étude de cas particulier

Quelqu'un peut-il me diriger

Select Top 10 CS.CaseStudyID, 
    CS.Title, 
    CSI.ImageFileName 
From CaseStudy CS 
Left Join CaseStudyImage CSI On CS.CaseStudyID = CSI.CaseStudyID 
And CSI.CSImageID in(
    Select Min(CSImageID) -- >not really satisfactory 
    From CaseStudyImage 
    Group By CaseStudyID 
    ) 
Order By CS.CaseStudyID ASC 

Au lieu de min (CSImageID) dans la bonne direction plaidoyers?

Répondre

0

ORDER BY RAND() LIMIT 1?

+0

No Limit en T-SQL ou rand (il y a newid()) et je suis geting perdu combinant le Top équivalent à la commande par newid() –

+0

il Désolé est Rand mais ça ne m'aide pas encore –

0

Cette article décrit 3 techniques pour l'échantillonnage aléatoire dans t-sql. Cela dépend du contrôle que vous avez sur la structure de votre table.

1

Vous pouvez utiliser la fonction de classement et newid() pour créer un ordre aléatoire avec le regroupement.

WITH CSI AS (
    SELECT CSI.CaseStudyID, CSI.ImageFileName, 
     ROW_NUMBER() OVER(PARTITION BY CSI.CaseStudyID ORDER BY newid()) AS RowNumber 
    FROM CaseStudyImage CSI 
) 
SELECT TOP (10) CS.CaseStudyID, CS.Title, CSI.ImageFileName 
FROM CaseStudy CS LEFT JOIN CSI On CS.CaseStudyID = CSI.CaseStudyID 
WHERE CSI.RowNumber = 1 
ORDER BY CS.CaseStudyID ASC 
1

habituellement, juste ORDER BY NEWID() fait le tour

Questions connexes