美文网首页
VBA+SQL求组合

VBA+SQL求组合

作者: 叶知行 | 来源:发表于2017-07-16 09:08 被阅读49次

A列数据两两组合,最接近3000的组合是?
A列数据有重复!!!


数据

写法1,A列分为a,b两表,两两组合,减去3000,等于0的就是符合条件的。

Sub 配对()
    Dim cnn As Object, rs As Object, LastRow&, SQL$
    Set cnn = CreateObject("ADODB.Connection")
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    cnn.Open "Provider = Microsoft.ace.Oledb.12.0;Extended Properties =Excel 12.0;Data Source =" & ThisWorkbook.FullName
    SQL = "select DISTINCT * from (select a.组合,(b.组合,a.组合+b.组合-3000) as 差 from"
    SQL = SQL & "[sheet1$a1:a" & LastRow & "] a,[sheet1$a1:a" & LastRow & "] b where a.组合<>b.组合) where 差=0 "
    Set rs = cnn.Execute(SQL)
    With Sheets("sheet1")
        .Range("j1:L100000").ClearContents
        .Range("j1").CopyFromRecordset rs
    End With
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
End Sub
  • 1、先求两两组合及其减去3000的差值
select a.组合,b.组合,(a.组合+b.组合-3000) as 差 from
 [sheet1$a1:a" & LastRow & "] a,
[sheet1$a1:a" & LastRow & "] b 
where a.组合<>b.组合
  • 2、在上表提取数据,差=0,的就是两两组合等于3000的,再去重复。
select DISTINCT * from 
(
select a.组合,b.组合,(a.组合+b.组合-3000) as 差 from 
[sheet1$a1:a" & LastRow & "] a,
[sheet1$a1:a" & LastRow &"] b 
where a.组合<>b.组合
) 
where 差=0 

写法2:

  • 1、先对原始数据用Distinct去重复
  • 2、两两配对,筛选和3000的差等于0的。
    为方便引用,用SQL server写了个CTE的,否则要写2个子查询,感觉代码好长。
with CTE_Test as 
(
select distinct * from dbo.Sheet1$
)

select c.* from 
(
select a.组合 as 组合1 ,b.组合 as 组合2,(a.组合+b.组合-3000) as 差

from CTE_Test as a,CTE_Test as b 

where a.组合<>b.组合
) c

where c.差 = 0

order by 组合1

EXCEL示例文件下载:
链接: http://pan.baidu.com/s/1pKXiivD 密码: f2qc

相关文章

  • VBA+SQL求组合

    A列数据两两组合,最接近3000的组合是?A列数据有重复!!! 写法1,A列分为a,b两表,两两组合,减去3000...

  • 求组合数

    排列组合是经常遇到的问题,本篇文章想跟大家探讨一下,对于给定的,我们该如何去求组合数。 方法一:递归(动态规划) ...

  • 算法模板(六)基础数论

    gcd与lcm Lucas求组合数

  • 组合数 模板

    Lucas定理 mod小于10^5 逆元求组合数

  • Chapter13—数学—组合数学

    1. 题目列表 POJ3252(组合数的递推计算、杨辉三角形、组合思想) poj1850(组合求序列标号) 2. ...

  • 【C语言】求组合数

    本题要求编写程序,根据公式 = 算出从n个不同元素中取出m个元素(m≤n)的组合数。 建议定义和调用函数fac...

  • 背包问题合集

    背包问题 判断是排列问题 还是 组合问题 确定遍历顺序: 如果求组合数就是外层for循环遍历物品,内层for遍历背...

  • AcWing 886. 求组合数 II

    AcWing 886. 求组合数 II 费马小定理 和 乘法逆元

  • 第六单元小结

    这一周我们学习了组合图形的面积这一单元,它们是组合图形的面积,成长的脚印,公顷、平方千米。 分割法求组合图...

  • 【计算机数学】组合数知识

    组合数排列: 那么在计算机中怎么求组合数排列呢: 可以通过递归求, 类似杨辉三角的方式算法方面我们一般用性能好的非...

网友评论

      本文标题:VBA+SQL求组合

      本文链接:https://www.haomeiwen.com/subject/peltkxtx.html