2010-05-10 62 views
1

在TSQL中生成组合的最有效和灵活的方法是什么? '灵活',我的意思是你应该能够轻松添加组合规则。例如:生成'n'个元素的组合,分类,移除重复,获得每个奖励属于不同彩票的组合等。在TSQL中生成组合的最有效和灵活的方法是什么?

例如,具有代表彩票奖励的一组数字。

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

(包括我的位置列,因为,一些可以在不同抽奖的奖品中重复)

我想产生像combinatories:

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

在C#中编写代码并使其在MSSQL Server中有一个选项? – 2010-05-10 17:26:26

+0

为什么“12 34”出现两次,但“12 43”只出现一次? – 2010-05-10 17:33:44

+0

@Mark我想显示与彩票67(和只有彩票67)的第一和第二个奖项的组合。组合12 43属于彩票67和89之间的组合:) – SDReyes 2010-05-10 22:33:56

回答

2

这就是所谓的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

好方法Mark tahnks! +1 – SDReyes 2010-05-10 22:34:35

1

更复杂的方法是使用F#,这样你的u ser可以使用域特定语言编写方程。

有关如何使用F#可以看到最后的评论在这个博客为例:

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

的原因是因为你将需要拿出一个简单的方法来计算,但是,另一种选择是使用C#和实体属性值结构(http://en.wikipedia.org/wiki/Entity-attribute-value_model),这样您就可以拥有一个灵活的系统,用户可以在其中为不同类型的彩票或不同规则创建方程式。

但是,所有这些可能是更多的东西,你需要什么,这取决于你真正需要多大的灵活性。

+0

詹姆斯,很有创意! +1非常感谢 – SDReyes 2010-05-11 14:33:33

相关问题