SQL版Python的itertools.combinations()

时间:2017-05-05 17:02:00

标签: python sql sql-server permutation

我正在尝试在SQL中复制Python函数,但我无法根据表而不是循环/迭代来考虑它。

import itertools
rangeStart = 1
rangeEnd = 20
rangeStep = 2
outputSize = 3

lst = range(rangeStart, rangeEnd, rangeStep)

list = list(itertools.combinations(lst, outputSize))
print(len(list))

如何在SQL中复制上述python代码的输出,同时仍然允许输入(能够绑定到用户界面中的输入字段)?

具体而言,输出应该是排列,而不是组合。我基本上试图从GUI获得一些输入,它们输入范围(即0,20),值的类型(偶数,奇数或全部),以及输出中每个元组的长度。输出是一个排序的元组列表,因此(1,2,3)是好的,(2,3,1)或(1,3,2)不好。元组的值也从左到右增加,因此(2,4,6)是好的,但(6,4,2)不是。元组中的值也是唯一的,因此(4,4,6)并不好。

1 个答案:

答案 0 :(得分:1)

使用递归cte从1到20生成奇数,然后生成一系列cross join s。

with t(val) as (select 1 union all select val+2 from t where val<19)
select * 
from t t1
cross join t t2 
cross join t t3
where t1.val<t2.val and t2.val<t3.val 

这会以行的形式生成您当前列表中的元组。

Sample Demo