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-2 18:15 | 显示全部楼层
本帖已被收录到知识树中,索引项:SQL应用
QUOTE:
以下是引用office2008在2008-9-2 18:04:36的发言:

假如为空,则为空,否则为字段本身?

Sql = "select iif(isnull(num),null,num) as aa from [连续3天失败标记$a1:d888]"

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-2 19:00 | 显示全部楼层

不考虑errtype 因素,重复只求最后一条.

SQL = " select  aa.num,aa.operation,aa.dt,last(aa.errtype) from [连续3天失败标记$a1:d888] aa,(" & SQL & ") bb " _
   & " where aa.num=bb.num and aa.operation=bb.operation and aa.dt=bb.dt and aa.errtype=bb.errtype group by " _
   & " aa.num,aa.operation,aa.dt  "

谢谢,以为不怎么可能的事情往往却有完美的结果,各位大师的技艺也是到了令人不得不佩服的境界.总之,非常感谢啊!

TA的精华主题

TA的得分主题

发表于 2008-9-3 15:15 | 显示全部楼层

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2008-9-3 23:28 | 显示全部楼层
QUOTE:
以下是引用office2008在2008-9-2 9:29:36的发言:

第三个问题:连续3天失败标记(求一组连续3天或3天以上的失败标记)  ,1,可重复,   2 如有重复取最后一条(巨难) ,高手可尝试做两种都做一

请问楼主所说的如有重复取最后一条记录中的最后一条该如何理解,满足什么条件才能认为它是最后一条?是根据错误类型errtype的取值还是根据某种排序结果?因为在数据库中对没有经过排序的记录谈第一条或最后一条(包括某条件下的局部位置)等是没有意义的,除非参考该字段的聚集索引顺序

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-3 23:41 | 显示全部楼层
恩,看的出你在这方面是高手,我的基础很差的,由于这几天CSDN网站看见  潇洒老乌龟-爱新觉罗.毓华(这个人很厉害)的帖子,觉得挺好,把有些比较好的拿上来让高手帮忙做做,我们学习一下,你如有空请指点迷津,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-3 23:45 | 显示全部楼层
姓名课程分数
张三语文74
张三数学83
张三物理93
李四语文74
李四数学84
李四物理

94

转换成

姓名语文数学物理
张三748393
李四748494

 ID = Join(Split("语文,数学,物理", ","), "','")
 SQL = " transform max(分数) select 姓名  from [行列转换$a1:c" & r & "] " _
 & " group by 姓名  pivot 课程 in ('" & ID & "') "   

如果

想转成

1,效果:
 姓名  语文  数学  物理  平均分  总分
 张三   74    83    93    83.33   250
 李四   74    84    94    84      252
 合计   148   167  187   167.33   502

请高手继续帮忙,谢谢!   

TA的精华主题

TA的得分主题

发表于 2008-9-3 23:56 | 显示全部楼层
QUOTE:
以下是引用figfig在2008-9-2 16:49:39的发言:

下面代码已经优化了,速度应该没问题了,呵呵

Sub fig()
 With Worksheets("连续3天失败标记")
   Set CNN = CreateObject("adodb.connection")
    CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & ThisWorkbook.FullName
       .Range("f2:i1000").ClearContents
       r = .Range("a65536").End(xlUp).Row
       Sql = "select a.num,a.operation,a.dt,a.errtype FROM [连续3天失败标记$a1:d888] a,[连续3天失败标记$a1:d888] b,[连续3天失败标记$a1:d888] c  where a.num=b.num and a.num=c.num and b.num=c.num and a.operation=b.operation and a.operation=c.operation and b.operation=c.operation and day(b.dt)-day(a.dt)=1 and day(c.dt)-day(b.dt)=1 and day(c.dt)-day(a.dt)=2"
     Sql = Sql & " union (select b.num,b.operation,b.dt,b.errtype FROM [连续3天失败标记$a1:d888] a,[连续3天失败标记$a1:d888] b,[连续3天失败标记$a1:d888] c  where a.num=b.num and a.num=c.num and b.num=c.num and a.operation=b.operation and a.operation=c.operation and b.operation=c.operation and day(b.dt)-day(a.dt)=1 and day(c.dt)-day(b.dt)=1 and day(c.dt)-day(a.dt)=2)"
      Sql = Sql & " union (select c.num,c.operation,c.dt,c.errtype FROM [连续3天失败标记$a1:d888] a,[连续3天失败标记$a1:d888] b,[连续3天失败标记$a1:d888] c  where a.num=b.num and a.num=c.num and b.num=c.num and a.operation=b.operation and a.operation=c.operation and b.operation=c.operation and day(b.dt)-day(a.dt)=1 and day(c.dt)-day(b.dt)=1 and day(c.dt)-day(a.dt)=2)"
     Sql = " select distinct num ,operation , dt , errtype  from (" & Sql & ") where len(num)>0"
   Sql = " select aa.num,aa.operation,aa.dt,aa.errtype from [连续3天失败标记$a1:d888] aa,(" & Sql & ") bb  where aa.num=bb.num and aa.operation=bb.operation and aa.dt=bb.dt and aa.errtype=bb.errtype"
   .Range("f2").CopyFromRecordset CNN.Execute(Sql)
End With
End Sub

楼主要求连续3天或3天以上的失败记录,此语句貌似只解决了连续3天的问题,而没有提及连续4天、5天......等情况

另外,由b-a=1,c-b=1这2个条件就足以证明c-a=2了,因此,c-a=2这个条件可以不写。

TA的精华主题

TA的得分主题

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

可答案告诉我连续5天的也解决了。

我没看懂,你看懂了请分解一下

TA的精华主题

TA的得分主题

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

差不多2个月没用数据库了,手生的很。

重新学习,并简化了fig的代码

Sub ldy简化()
    With Worksheets("连续3天失败标记")
        Set CNN = CreateObject("adodb.connection")
        CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & ThisWorkbook.FullName
        .Range("f2:i1000").ClearContents
        Sql = "(select * FROM [连续3天失败标记$a1:d888] a, [连续3天失败标记$a1:d888] b, [连续3天失败标记$a1:d888] c where a.num=b.num and b.num=c.num and a.operation=b.operation and b.operation=c.operation and day(b.dt)-day(a.dt)=1 and day(c.dt)-day(b.dt)=1)"
        Sql = "select a.num,a.operation,a.dt,a.errtype from " & Sql & " union select b.num,b.operation,b.dt,b.errtype from" & Sql & " union select c.num,c.operation,c.dt,c.errtype from " & Sql
        Sql = "select aa.num,aa.operation,aa.dt,aa.errtype from [连续3天失败标记$a1:d888] aa, (" & Sql & ") bb where aa.num & aa.operation & aa.dt & aa.errtype = bb.num & bb.operation & bb.dt & bb.errtype"
        .Range("f2").CopyFromRecordset CNN.Execute(Sql)
    End With
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-12 07:37 , Processed in 0.054311 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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