在TSQL中生成组合的最有效和最灵活的方法是什么? 使用“灵活”,我的意思是您应该能够轻松添加组合规则。例如:生成'n'元素的组合,排序,删除重复,获得每个奖项属于不同彩票的组合等。
例如,有一组代表彩票奖品的数字。
Number | Position | Lottery
---------------------------
12 | 01 | 67
12 | 02 | 67
34 | 03 | 67
43 | 01 | 89
72 | 02 | 89
33 | 03 | 89
(我包括位置栏,因为,不同彩票的奖品可以重复一个数字)
我想生成像:
这样的组合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 :(得分: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
答案 1 :(得分:1)
更复杂的方法是使用F#,以便用户可以使用域特定语言编写方程式。
有关如何使用F#的示例,您可以在此博客中看到最终评论:
http://cs.hubfs.net/forums/thread/4496.aspx
原因是因为您需要提出一种简单的方法来进行计算,由用户编写,但另一种选择是使用C#和实体 - 属性 - 值结构(http://en.wikipedia.org/wiki/Entity-attribute-value_model ),这样你就可以拥有一个灵活的系统,用户可以为不同类型的彩票或不同的规则创建方程式。
但是根据您真正需要的灵活性,所有这些对您所需要的内容可能更具有过分杀伤力。