sql server - valeurs - Comment puis-je sélectionner X lignes aléatoires tout en garantissant que Y certaines lignes spécifiques sont dans le résultat?




supprimer doublons sql (2)

   Declare @number_of_nonmandat INT

   Select @number_of_nonmandat=count(1)
   FROM Question
   where isMandatory =1

   SET @number_of_nonmandat=20-number_of_nonmandat;

    IF(@number_of_nonmandat>0)
    BEGIN
         Select *
         FROM Question
         where isMandatory =1
           UNION 
         SELECT TOP (@number_of_nonmandat)  *
         FROM Question
         where isMandatory<>1
         ORDER BY newID()
    END
    ELSE 
    BEGIN
        Select top 20 *
         FROM Question
         where isMandatory =1

    END

https://code.i-harness.com

Supposons une structure de table:

Create Table Question
{
ID int pk,
Category varchar
Stem varchar,
AnswerA varchar,
...
AnswerD varchar,
Correct char,
isMandatory bit

}

Pour une catégorie donnée, il y a environ 50 questions. Il peut y avoir 1-10 questions obligatoires.

J'ai besoin de sélectionner toutes les questions obligatoires, puis assez d'autres questions au hasard pour faire un ensemble de questions de 20 questions.


;WITH T 
     AS (SELECT *, 
                ROW_NUMBER() 
                  OVER (PARTITION BY Category 
                            ORDER BY isMandatory DESC, CRYPT_GEN_RANDOM(4)) RN 
         FROM   Question) 
SELECT * 
FROM   T 
WHERE  RN < = 20 




random