在SQL中生成组合的最有效和最灵活的方法是什么?

时间:2010-05-10 17:22:34

标签: sql-server tsql sql-server-2008 combinations

在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

        .
        .
        .

2 个答案:

答案 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 ),这样你就可以拥有一个灵活的系统,用户可以为不同类型的彩票或不同的规则创建方程式。

但是根据您真正需要的灵活性,所有这些对您所需要的内容可能更具有过分杀伤力。