【问题标题】:What is the most effective and flexible way to generate combinations in TSQL?在 SQL 中生成组合最有效和最灵活的方法是什么?
【发布时间】:2010-05-11 08:28:36
【问题描述】:

在 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

        .
        .
        .

【问题讨论】:

  • 是否可以使用 C# 编写代码并将其置于 MSSQL Server 中?
  • 为什么“12 34”出现两次,而“12 43”只出现一次?
  • @Mark 我想展示与彩票 67(并且只有彩票 67)的一等奖和二等奖的组合。 12 43的组合属于彩票67和89之间的组合:)
  • @James 是的,这是一个选项:)

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


【解决方案1】:

这称为交叉连接:

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

【讨论】:

  • 不错的方法 Mark tahnks! +1
【解决方案2】:

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

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

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

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

但根据您真正需要的灵活性,所有这些对于您的需求来说可能都过于矫枉过正。

【讨论】:

  • 詹姆斯的回答很好,很有创意! +1 非常感谢
猜你喜欢
  • 1970-01-01
  • 2012-01-21
  • 2011-08-12
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2020-09-07
  • 1970-01-01
相关资源
最近更新 更多