Grâce à l'aide de beaucoup d'entre vous, j'ai reçu le code suivant qui fonctionne très bien. Cependant ive réalisé ive manqué un peu d'information importante hors de la question et donc reposted ici (avec le code mis à jour) pour clarifier.SP: Enregistrements aléatoires, Enregistrement Fave, Enregistrement Plus Réputé, PAS de répétition
Le code suivant obtient 5 enregistrements aléatoires d'une table, plus un autre enregistrement unique basé sur les utilisateurs favoris identifiés dans une deuxième table:
CREATE PROCEDURE web.getRandomCharities
(
@tmp_ID bigint --members ID
)
AS
BEGIN
WITH q AS
(
SELECT TOP 5 *
FROM TBL_CHARITIES
WHERE cha_Active = 'TRUE'
AND cha_Key != '1'
ORDER BY NEWID()
)
SELECT *
FROM q
UNION ALL
SELECT TOP 1 *
FROM (
SELECT *
FROM TBL_CHARITIES
WHERE TBL_CHARITIES.cha_Key IN
(
SELECT members_Favourite
FROM TBL_MEMBERS
WHERE members_Id = @tmp_ID
)
EXCEPT
SELECT *
FROM q
) tc
END
Cependant, j'ai réalisé aussi besoin d'inclure le dossier où "cha_Key == '1'" si ce n'est pas la même chose que l'enregistrement retourné dans la deuxième instruction SELECT dans le code ci-dessus.
Qu'est-ce qui est logique?
MERCI !!!
Pourriez-vous s'il vous plaît fournir quelques exemples de données et un resultset que vous souhaitez obtenir? – Quassnoi
Il est préférable que vous venez de modifier votre question originale avec plus de détails. http://meta.stackexchange.com/questions/7771/is-this-abuse-or-misunderstanding-of-the-way-things-work –
Quassnoi, Ok donc ce que je veux faire, c'est tout comme ci-dessus, mais aussi obtenir l'enregistrement que weve éliminé dans la première déclaration (cha_Key! = '1' ) si ce n'est pas le favori des utilisateurs (comme le retour par la déclaration de l'union) Essentiellement je veux 5 enregistrements aléatoires uniques (mais pas enregistrer No1) , plus l'enregistrement favori des utilisateurs, plus l'enregistrement No1 si ce n'est pas le favori. L'enregistrement n ° 1 devrait toujours apparaître comme le 1er enregistrement. Espérons que cela explique mieux? – Munklefish