我需要一个可以在(或作为)函数中使用并检索 n 值的所有组合的查询。我需要所有长度为 k 的组合,其中 k = 1..n。
扩展样本输入和结果,因此输入有 3 个值而不是 2 个 - 但是,输入值的数量可能在 1 到 n 之间变化。
示例:输入:多行中一列中的值的表
Value (nvarchar(500))
------
Ann
John
Mark
输出#1:一列中连接值的表
Ann
John
Mark
Ann,John
John,Mark
Ann,Mark
Ann,John,Mark
对于相对较小的值
n
(本例中为 20),您可以使用利用自然整数是位组合这一事实的方法。T-SQL 解决方案
样本数据:
解决方案:
输出样本:
执行计划:
将1,048,576 个组合写入笔记本电脑上的变量需要41 秒。通过强制并行,我能够将执行时间降低到 13 秒。
DOP 8
如果您需要一个数字表,这是一种快速的生成方法:
SQLCLR 解决方案
在 SQLCLR(SQL Server 2005 及更高版本)中可以实现更高效的实现:
示例用法:
输出:
使用前面的 20 元素集:
SQLCLR 解决方案:
我的笔记本电脑上1,048,576个组合的执行时间为2.5 秒。
DOP 1
创建 CSV 输入:
寻找组合:
C#源代码: