8
votes

Résultat de la requête de commande par la liste des valeurs

Je travaille sur une requête SQL qui est adoptée une liste de valeurs en tant que paramètre, comme xxx pré>

cette liste est construite de relations utilisées dans la base de données et doit être conservée dans Cette commande. P>

Je voudrais commander les résultats par cette liste. Je n'ai besoin que du premier résultat, mais cela pourrait être celui avec Groupid 7 dans ce cas. p>

Je ne peux pas interroger comme p>

order by (24,12,7,14,65).indexOf(GroupId)


2 commentaires

Pourriez-vous avoir le paramètre passé sous forme de xml et vous pourriez alors saisir les valeurs de manière dynamique?


Le problème avec cette liste de valeurs est qu'il est utilisé à divers emplacements dans mon application. Je peux apporter de petits changements à ce sujet avant de le transmettre en tant que paramètre, comme la modification de la "valeur" '. L'outil DEV (WebDev12) utilise une sorte de remplacement de chaîne pour créer les requêtes, donc {paramètre} sera remplacé par une valeur que je fournis.


4 Réponses :


2
votes

Faites une jointure avec une table temporaire dans laquelle vous avez les valeurs que vous souhaitez filtrer par des lignes. Ajoutez une colonne qui a la commande que vous souhaitez comme deuxième colonne et trier par elle.


0 commentaires

7
votes

Utilisez une table variable de table ou temporaire avec une colonne d'identité, nourrir vos valeurs et y participer à cela, par exemple. xxx


1 commentaires

Super! Juste pour faciliter la vie, à partir de SQL Server 2018, vous pouvez faire: insérer dans les valeurs de @Rank (numéro) (24), (12), (7), (14), (65). De cette façon, vous économisez un peu d'insertions et de gérer mieux pour une plus grande liste de valeurs;)



12
votes

Vous pouvez également commander par cas: xxx


0 commentaires

5
votes

Je pense que j'ai peut-être trouvé une solution possible (mais c'est laid): xxx

Cela commandera les lignes par la position qu'ils se produisent dans la liste. Et je peux transmettre la corde comme si j'aurais besoin aussi.


4 commentaires

On dirait que cela me ferait un porc de performance comparé à l'utilisation d'une table Temp. Briser une chaîne délimitée n'est pas difficile, il y a beaucoup de code sur le net pour le faire.


Merci! Je ne suis pas un expert SQL, mais je vais y examiner.


Juste la réponse que je recherche - nécessite le moins de travail pour mettre en œuvre une liste de valeurs inconnues et de taille inconnue


Merci, cela fonctionne parfaitement pour avoir commandé de petites listes dynamiques sans le saut des temps, des jointures et des cas. bien fait!