'第一个问题: ~像现在只能得到所有的数据,如果(姓名+日期+打卡时间)三者同时出现了重复的数据,那么改如何排除掉,则不要提取.'第一个问题: ~得到记录集之后,在判断时间之后填入Grid后.为何没有依次把对应顺序填入.(可能这样说没能说的很清楚)Call OpenConkSQL = "select 考勤表.卡号,考勤表.日期,考勤表.打卡时间,员工表.编号,员工表.姓名 from 考勤表 left Outer join 员工表 on 考勤表.卡号 = 员工表.编号"rs.Open SQL, cn, 1, 1If rs.EOF Then Exit SubDo While Not rs.EOFGrid.Rows = Grid.Rows + 1Grid.TextMatrix(Grid.Rows - 1, 0) = Grid.Rows - 1Grid.TextMatrix(Grid.Rows - 1, 1) = rs!姓名Grid.TextMatrix(Grid.Rows - 1, 2) = rs!日期If rs!打卡时间 >= "08:00" And rs!打卡时间 <= "09:00" Then '上班卡       [第二个问题的地方]
Grid.TextMatrix(Grid.Rows - 1, 3) = rs!打卡时间ElseIf rs!打卡时间 >= "11:30" And rs!打卡时间 <= "12:30" Then '下班卡
Grid.TextMatrix(Grid.Rows - 1, 4) = rs!打卡时间ElseIf rs!打卡时间 >= "12:31" And rs!打卡时间 <= "13:30" Then '上班卡
Grid.TextMatrix(Grid.Rows - 1, 5) = rs!打卡时间ElseIf rs!打卡时间 >= "17:30" And rs!打卡时间 <= "18:30" Then '下班卡
Grid.TextMatrix(Grid.Rows - 1, 6) = rs!打卡时间End If
rs.MoveNext
LoopCall CloseConk

解决方案 »

  1.   

    1
    group by 姓名,日期,打卡时间 2
    order by
      

  2.   


    试试:
    SQL = "select 考勤表.卡号,考勤表.日期,考勤表.打卡时间,员工表.编号,员工表.姓名 from 考勤表 left Outer join 员工表 on 考勤表.卡号 = 员工表.编号 Group By 考勤表.卡号,考勤表.日期,考勤表.打卡时间 Order By 考勤表.日期,考勤表.打卡时间, 员工表.编号"
      

  3.   

    1 防止出现重复数据,可以在SQL语名在加Distinct 关键字SQL = "select distinct 考勤表.卡号,考勤表.日期,考勤表.打卡时间,员工表.编号,员工表.姓名 from 考勤表 left Outer join 员工表 on 考勤表.卡号 = 员工表.编号"2 对SQL语句先进行排序SQL = "select distinct 考勤表.卡号,考勤表.日期,考勤表.打卡时间,员工表.编号,员工表.姓名 from 考勤表 left Outer join 员工表 on 考勤表.卡号 = 员工表.编号 order by 员工表.编号,考勤表.日期,考勤表.打卡时间"
    另外,填入数据的过程中应该对数据进行一下判定,比如同一个员工才写横列,否则行数应该增加1
      

  4.   


    '第一个问题: ~像现在只能得到所有的数据,如果(姓名+日期+打卡时间)三者同时出现了重复的数据,那么改如何排除掉,则不要提取.
    '在select用DISTINCT
    '第二个问题: ~得到记录集之后,在判断时间之后填入Grid后.为何没有依次把对应顺序填入.(可能这样说没能说的很清楚)
    '在select用Order By,然后需要加入一些校验逻辑。
    '第二个问题的主要原因是将列向数据转换成横向数据时的错误。
    '
    '
    '
    'Call OpenConkSQL = "select DISTINCT 考勤表.卡号,考勤表.日期,考勤表.打卡时间,员工表.编号,员工表.姓名 from 考勤表 left Outer join 员工表 on   考勤表.卡号 = 员工表.编号 ORDER BY 考勤表.卡号 ASC, 考勤表.日期 ASC"rs.Open SQL, cn, 1, 1
    dim tmpId as String
    If rs.EOF Then Exit SubDo While Not rs.EOFIf tmpId = rs!卡号 then
      If rs!打卡时间 >= "08:00" And rs!打卡时间 <= "09:00" Then '上班卡       [第二个问题的地方]
      Grid.TextMatrix(Grid.Rows - 1, 3) = rs!打卡时间  ElseIf rs!打卡时间 >= "11:30" And rs!打卡时间 <= "12:30" Then '下班卡
      Grid.TextMatrix(Grid.Rows - 1, 4) = rs!打卡时间  ElseIf rs!打卡时间 >= "12:31" And rs!打卡时间 <= "13:30" Then '上班卡
      Grid.TextMatrix(Grid.Rows - 1, 5) = rs!打卡时间  ElseIf rs!打卡时间 >= "17:30" And rs!打卡时间 <= "18:30" Then '下班卡
      Grid.TextMatrix(Grid.Rows - 1, 6) = rs!打卡时间
      End If
    Else
      Grid.Rows = Grid.Rows + 1  Grid.TextMatrix(Grid.Rows - 1, 0) = Grid.Rows - 1  Grid.TextMatrix(Grid.Rows - 1, 1) = rs!姓名  Grid.TextMatrix(Grid.Rows - 1, 2) = rs!日期  If rs!打卡时间 >= "08:00" And rs!打卡时间 <= "09:00" Then '上班卡       [第二个问题的地方]
      Grid.TextMatrix(Grid.Rows - 1, 3) = rs!打卡时间  ElseIf rs!打卡时间 >= "11:30" And rs!打卡时间 <= "12:30" Then '下班卡
      Grid.TextMatrix(Grid.Rows - 1, 4) = rs!打卡时间  ElseIf rs!打卡时间 >= "12:31" And rs!打卡时间 <= "13:30" Then '上班卡
      Grid.TextMatrix(Grid.Rows - 1, 5) = rs!打卡时间
      
      ElseIf rs!打卡时间 >= "17:30" And rs!打卡时间 <= "18:30" Then '下班卡
      Grid.TextMatrix(Grid.Rows - 1, 6) = rs!打卡时间
      
      End If  tmpId = rs!卡号
    End If
    rs.MoveNext
    LoopCall CloseConk