2010-05-10 7 views
1

Quelle est la manière la plus efficace et la plus flexible de générer des combinaisons dans TSQL? Avec 'Flexible', je veux dire que vous devriez pouvoir ajouter facilement des règles de combinaison. par exemple: générer des combinatoires de 'n' éléments, trier, supprimer des doublons, obtenir des combinatoires où chaque lot appartient à une loterie différente, etc.Quelle est la manière la plus efficace et la plus flexible de générer des combinaisons dans TSQL?

Par exemple, Avoir un ensemble de nombres représentant des prix de loterie.

Number | Position | Lottery 
--------------------------- 
12 | 01  | 67 
12 | 02  | 67 
34 | 03  | 67 
43 | 01  | 89 
72 | 02  | 89 
33 | 03  | 89 

(I comprennent la colonne de position parce que, un certain nombre pourrait être répété entre les différents des prix de loterie)

Je voudrais générer combinatoires comme:

Numbers | Lotteries 
------------------- 
12 12 | 67 67 
12 34 | 67 67 
12 34 | 67 67 
12 43 | 67 89 
12 72 | 67 89 
12 33 | 67 89 

     . 
     . 
     . 
+0

Est-ce que écrire votre code en C# et l'avoir dans MSSQL Server est une option? –

+0

Pourquoi "12 34" apparaît-il deux fois mais "12 43" apparaît seulement une fois? –

+0

@Mark Je voulais montrer la combinaison avec les premier et deuxième prix de la loterie 67 (et seulement la loterie 67). la combinaison 12 43 appartient aux combinaisons entre la loterie 67 et 89:) – SDReyes

Répondre

2

Ceci est appelé CROSS JOIN :

SELECT 
    CAST(T1.Number AS VARCHAR) + ' ' + CAST(T2.Number AS VARCHAR) AS Numbers, 
    CAST(T1.Lottery AS VARCHAR) + ' ' + CAST(T2.Lottery AS VARCHAR) AS Lottery 
FROM table1 T1 
CROSS JOIN table1 T2 
ORDER BY Numbers 
+0

Belle approche Mark tahnks! +1 – SDReyes

1

L'approche la plus compliquée serait d'utiliser F # afin que le u ser peut écrire des équations en utilisant un langage spécifique au domaine.

Pour un exemple de la façon d'utiliser F # vous pouvez voir le dernier commentaire dans ce blog:

http://cs.hubfs.net/forums/thread/4496.aspx

La raison d'être parce que vous aurez besoin de trouver un moyen facile de faire les calculs, écrit par l'utilisateur, mais l'autre option consiste à utiliser C# et une structure entité-valeur-attribut (http://en.wikipedia.org/wiki/Entity-attribute-value_model), de sorte que vous pouvez avoir un système flexible où l'utilisateur peut créer des équations pour différents types de loteries, ou des règles différentes.

Mais tout cela peut être plus exagéré pour ce dont vous avez besoin, selon la flexibilité dont vous avez réellement besoin.

+0

Bonne réponse James, très créatif! +1 Merci beaucoup – SDReyes

Questions connexes