代码之家  ›  专栏  ›  技术社区  ›  SDReyes

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

  •  1
  • SDReyes  · 技术社区  · 15 年前

    在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 回复  |  直到 15 年前
        1
  •  2
  •   Mark Byers    15 年前

    这称为交叉联接:

    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
    
        2
  •  1
  •   James Black    15 年前

    更复杂的方法是使用f,这样用户就可以使用特定领域的语言编写方程。

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

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

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

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