ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: office2008

[讨论][分享]SQL接龙(figfig,烟雨,ldy,sgrshh29等完成)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-9-4 15:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:SQL应用
QUOTE:
以下是引用office2008在2008-9-4 8:39:05的发言:

已解决一部分,下面增加了平均分和总分

然后在下面增加一条合计,看有红色的地方

谢谢LDY高手

我上传附件,在  "双表比较"  中 full join 在EXCEL里估计难,我做了一个 左右连接 请简化

"两两相同取其一" 中replace函数用不了,只能用 iif, left ,len函数组合而成,看看能否精简

"行列转换" 中 按要求 平均分,总分 再添一条合计. 看附件 ,反一下 从 下表转成上表 ,又如何办?

其他表的代码看看能否改进化?



excel,access 不支持full join,实现办法是left join+right join +union

Sub yy10()
 With Worksheets("双表比较")
   Set CNN = CreateObject("adodb.connection")
    CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & ThisWorkbook.FullName
     r = .Range("a65536").End(xlUp).Row
    .Range("f2:l100").ClearContents

Sql = " select * from [双表比较$a1:d7] a left join  [双表比较$a12:d17] b on a.SKU&a.货物批号&a.生产日期=b.SKU&b.货物批号&b.生产日期"
sql2 = " select * from [双表比较$a1:d7] a right join  [双表比较$a12:d17] b on a.SKU&a.货物批号&a.生产日期=b.SKU&b.货物批号&b.生产日期"

sql3 = Sql & " union " & sql2


Sql = "select  iif(isnull(a.sku),b.sku,a.sku),iif(isnull(a.货物批号),b.货物批号,a.货物批号),iif(isnull(a.生产日期),b.生产日期,a.生产日期),a.数量,b.数量,iif(isnull(a.数量),0,a.数量)-iif(isnull(b.数量),0,b.数量),switch(isnull(a.数量),'库存',isnull(b.数量),'系统',true,'正常')  from (" & sql3 & " )"
  .Range("f2").CopyFromRecordset CNN.Execute(Sql)
End With
End Sub

[此贴子已经被作者于2008-9-4 15:44:33编辑过]

TA的精华主题

TA的得分主题

发表于 2008-9-4 16:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

"两两相同取其一" 中replace函数用不了,只能用 iif, left ,len函数组合而成,看看能否精简

Sub yy9()
 With Worksheets("两两相同取其一")
   Set CNN = CreateObject("adodb.connection")
    CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & ThisWorkbook.FullName
     r = .Range("a65536").End(xlUp).Row
     
    
       Sql = " select iif(instr(iif(instr(cc,bb)>0,cc,bb&cc),aa)>0,iif(instr(cc,bb)>0,cc,bb&cc), aa & iif(instr(cc,bb)>0,cc,bb&cc)) from [两两相同取其一$a1:c8]"
     
      .Range("e2:g100").ClearContents
      .Range("e2").CopyFromRecordset CNN.Execute(Sql)
End With
End Sub

解答精彩,帖子比较多,就在这里加分  -ldy

[此贴子已经被ldy于2008-9-4 17:47:20编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-4 16:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

62的代码好,解决了有空白就只取其一的问题.我也用instr做过,没能理出来,逻辑混乱,呵呵.

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-4 17:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
秘诀是要倒过来算,呵呵,figfig大师思维确实是好啊!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-4 20:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

求助- sql中未知(空值)的解决办法(已解决)


Sub yy11_4()     '行转列
 With Worksheets("行列转换")
   Set CNN = CreateObject("adodb.connection")
    CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & ThisWorkbook.FullName
     
SQL = "select * from (select 姓名,'语文' as 课程,语文 from [行列转换$e9:h11]" _
  & " Union all" _
  & " select 姓名,'数学'as 课程,数学 from [行列转换$e9:h11]" _
  & " Union all" _
  & " select 姓名,'物理'as 课程,物理 from [行列转换$e9:h11] ) t " _
  & " order by t.姓名, " _
  & " iif(t.课程 = '语文', 1 ,iif(t.课程 = '数学' , 2 ,iif(t.课程 = '物理',3 ))) "  '语文,数学,物理 这样排序

      .Range("e15:j20").ClearContents
      .Range("e15").CopyFromRecordset CNN.Execute(SQL)
     
End With

End Sub

[此贴子已经被作者于2008-9-4 21:36:02编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-4 21:56 | 显示全部楼层

行转列 加 平均分 和 总分

Sub yy11_5()     '行转列
 With Worksheets("行列转换")
   Set CNN = CreateObject("adodb.connection")
    CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & ThisWorkbook.FullName
     r = .Range("a65536").End(xlUp).Row
    
     
      SQL = "  select * from (" _
  & " select 姓名 as 姓名 ,'语文' as 课程,  语文  from [行列转换$e9:h11]" _
  & " Union all " _
  & " select 姓名 as 姓名 ,'数学' as 课程,  数学  from [行列转换$e9:h11]" _
  & " Union all " _
  & " select 姓名 as 姓名 ,'物理' as 课程,  物理  from [行列转换$e9:h11]" _
  & " Union all" _
  & " select 姓名 as 姓名 ,'平均分' as 课程, (语文 + 数学 + 物理)/3  from [行列转换$e9:h11]" _
  & " Union all" _
  & " select 姓名 as 姓名 , '总分' as 课程,语文 + 数学 + 物理  from [行列转换$e9:h11] ) t" _
  & " order by 姓名, " _
  & " iif(t.课程 = '语文', 1 ,iif(t.课程 = '数学' , 2 ,iif(t.课程 = '物理',3 ,iif(t.课程 = '平均分',4 ,iif(t.课程 = '总分',5 ))))) "


      .Range("e15:j26").ClearContents
      .Range("e15").CopyFromRecordset CNN.Execute(SQL)
     
End With

End Sub

TA的精华主题

TA的得分主题

发表于 2008-9-4 22:11 | 显示全部楼层

  建议用 switch

 SQL = "  select * from (" _
  & " select 姓名 as 姓名 ,'语文' as 课程,  语文  from [行列转换$e9:h11]" _
  & " Union all " _
  & " select 姓名 as 姓名 ,'数学' as 课程,  数学  from [行列转换$e9:h11]" _
  & " Union all " _
  & " select 姓名 as 姓名 ,'物理' as 课程,  物理  from [行列转换$e9:h11]" _
  & " Union all" _
  & " select 姓名 as 姓名 ,'平均分' as 课程, (语文 + 数学 + 物理)/3  from [行列转换$e9:h11]" _
  & " Union all" _
  & " select 姓名 as 姓名 , '总分' as 课程,语文 + 数学 + 物理  from [行列转换$e9:h11] ) t" _
  & " order by 姓名, " _
  & " switch(t.课程 = '语文', 1 ,t.课程 = '数学' , 2 ,t.课程 = '物理',3 ,t.课程 = '平均分',4 ,t.课程 = '总分',5 ) "

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-4 22:17 | 显示全部楼层

哈哈哈哈,我用了,跟你的一样,可就是不行。

仔细看了,原来 switch 我写成 swith

这个函数用处蛮多,我正奇怪着呢,谢谢 figfig 大师

[此贴子已经被作者于2008-9-4 22:24:29编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-5 21:42 | 显示全部楼层
F1F2
aa1
bb1
cc1
aa3
aa4
bb2
cc2
cc3
dd5

效果:

f1t1t2t3t4t5
aa1 a3a4 
bb1b2   
cc1c2c3  
d    d5

给高手练练手,让我们也学习学习.谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-5 22:23 | 显示全部楼层
IP1ip2namepwdkkk 
a1a2aaa111a
a1a2aaa111b
a1a2aaa111c
b1b2bbb111d
b1b2bbb111e
b1b2ccc111f

要求

IP1   ip2  name   pwd   kkk
a1    a2   aaa    111   a,b,c
b1    b2   bbb    111   d,e
b1    b2   ccc    111   f

包括楼上的附件,请帮助

 

 

 

fxjM3lC8.rar (20.17 KB, 下载次数: 3)
[此贴子已经被作者于2008-9-5 22:25:14编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-12 07:42 , Processed in 0.048989 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表