1

在 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

        .
        .
        .
4

2 回答 2

2

这称为交叉连接:

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
于 2010-05-10T17:28:08.353 回答
1

更复杂的方法是使用 F#,以便用户可以使用领域特定语言编写方程式。

有关如何使用 F# 的示例,您可以在此博客中查看最终评论:

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

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

但是,根据您真正需要的灵活性,所有这些对于您需要的东西来说都可能是多余的。

于 2010-05-11T00:28:36.667 回答