|
楼主 |
发表于 2009-4-19 14:36
|
显示全部楼层
原帖由 office2008 于 2009-4-19 09:31 发表
Sub test_sql()
With Worksheets("数据表")
Set CNN = CreateObject("adodb.connection")
CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Sour ...
太牛了,又是2008兄出手相助,非常感谢!
这个嵌套写得非常牛X,不过无法做日期选择了,原来的代码 日期 between #2009-1-1# and #2009-4-25#
中2个日期2009-1-1和 2009-4-25 原本是2个单元格的值,我可以通过这2个单元格的值来选择时间段,为了方便解答者解答,我直接把它们改成了代码里的数字,我描述不清,反而误导了解答者,这完全怪我,非常抱歉。
试改了一下,加上日期选择,如下
Sql = " select * from ( select c.姓名,iif(isnull(c.职位),d.职位,c.职位) as 职位,iif(isnull(c.职位), " _
& " iif(isnull(c.班组),d.班组,c.班组),iif(isnull(c.班组),d.班组,c.班组)) as 班组 from (select a.姓名, " _
& " b.职位,b.班组 from (select max(日期)>=" & [S1].Value & " and max(日期)<=" & [T1].Value & " as 日期,姓名 from (select 日期,姓名,iif(在职状态='离职',1,0) as 在职状态 " _
& " from [数据表$a1:f" & r & "]) group by 姓名 having sum(在职状态)<1) a left join [数据表$a1:f" & r & "] b on a.姓名 " _
& " = b.姓名 and a.日期=b.日期 ) c left join [数据表$a1:f" & r & "] d on c.姓名= d.姓名) where 职位<>''and 班组<>'' "
=============================================================================================
注:
[S1].Value =2009-1-1
[T1].Value =2009-4-25 (可以自定义,从而选择时间段)
结果不正确,估计是嵌套的 left join 没有使用 前面的 select 范围。
不知道怎么改一下代码。
再次感谢2008兄,非常感谢。 |
|