问题是这样的,我有个表record记录着每个人的每天的打卡记录信息,一天一般打两次,当然有的人打一次卡也有的没打
这个表的格式是这样的
姓名  记录号    时间
xx     1   2011-9-15 23:09:43
xx     1   2011-9-15 20:10:06
zz     2   2011-9-13 13:10:35
yy     3   2011-9-13 22:11:10
我现在想实现这样的结果
时间1     姓名   记录号     时间                                                                          次数
2011-9-15  xx       1      2011-9-15 23:09:43/2011-9-15 20:10:06(可以其他格式,只要能看到两个具体的时间)  2
2011-9-13  zz       2      2011-9-13 13:10:35                                                             1
2011-9-13  yy       3      2011-9-13 22:11:10                                                             1
要怎么实现,跪谢了,请各位大侠帮忙 

解决方案 »

  1.   

    select 姓名,min(时间) as 开始时间,max(时间) as 结束时间 from 表 group by 姓名
      

  2.   

    简单的做法是写一个SQL函数处理时间,把日期和姓名传进去,返回时间
      

  3.   

    把表结构按照你的想要的输出结构设计就行了。
    每人每天一条记录,打卡时间直接直接存为特殊符号分隔的字符串格式,不关打卡几次都可以存下来。当然,还应该加一个日期字段,记录是哪天的打卡信息,便于SQL查找。
      

  4.   


    create table TB
    (
    Name nvarchar(20),
    ID int,
    CreateTime datetime
    )
    GO
    insert into TB
    SELECT 'ZZ',2,'2011-09-13 13:20:10' UNION
    SELECT 'YY',3,'2011-09-13 22:11:10' UNION
    SELECT 'XX',1,'2011-09-15 23:09:43' UNION
    SELECT 'XX',1,'2011-09-15 20:32:23' UNION
    SELECT 'XX',1,'2011-09-19 04:16:22' UNION
    SELECT 'XX',1,'2011-09-19 13:11:23' UNION
    SELECT 'ZZ',2,'2011-09-19 16:12:10' 
    GO
     
    SELECT CONVERT(varchar(10),CreateTime,121),Name,ID,COUNT(1)  
    ,(select Convert(varchar(20),CreateTime,120)+'/' from TB WHERE  Name=a.Name and CONVERT(varchar(10),CreateTime,121)= CONVERT(varchar(10),a.CreateTime,121)  FOR XML PATH('') ) AS TimeList
    from TB a
    GROUP BY Name,ID,CONVERT(varchar(10),CreateTime,121)
    GO
    drop table TB
     GO(7 行受影响)
               Name                 ID                      TimeList
    ---------- -------------------- ----------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2011-09-15 XX                   1           2           2011-09-15 20:32:23/2011-09-15 23:09:43/
    2011-09-19 XX                   1           2           2011-09-19 04:16:22/2011-09-19 13:11:23/
    2011-09-13 YY                   3           1           2011-09-13 22:11:10/
    2011-09-13 ZZ                   2           1           2011-09-13 13:20:10/
    2011-09-19 ZZ                   2           1           2011-09-19 16:12:10/(5 行受影响)
      

  5.   

    CREATE TABLE tb
    (
    xm        NVARCHAR(50),
    recordid  NVARCHAR(10),
    dt        DATETIME
    )
    INSERT INTO tb 
    SELECT 'xx',
           '1',
           '2011-9-15 23:09:43'
    UNION ALL 
    SELECT 'xx',
           '1',
           '2011-9-15 20:10:06'
    UNION ALL 
    SELECT 'zz',
           '2',
           '2011-9-13 13:10:35'
    UNION ALL 
    SELECT 'yy',
           '3',
           '2011-9-13 22:11:10'
           UNION ALL
    SELECT 'xx',
           '1',
           '2011-9-14 23:09:43'
    UNION ALL 
    SELECT 'xx',
           '1',
           '2011-9-14 20:10:06'
    SELECT id = ROW_NUMBER() OVER(
               PARTITION BY xm,
               CONVERT(VARCHAR, dt, 23) ORDER BY GETDATE()
           ),
           *
           INTO #tb
    FROM   tbDECLARE @sql VARCHAR(8000)
    SET @sql = ''
    SELECT @sql = @sql + ',max(case when id=' + RTRIM(id) + ' then dt end) as [dt'
           + RTRIM(id) + ']'
    FROM   (
               SELECT DISTINCT id
               FROM   #tb
           ) APRINT @sql
    SELECT @sql = 'select xm' + @sql +
           ' from #tb group by xm,CONVERT(VARCHAR,dt,23)'EXEC (@sql)
    DROP TABLE #tb
    DROP TABLE tb
      

  6.   

    各位大侠,很谢谢你们的帮助,可是我想实现的并不是单单的这个查询出来,我的数据库不止有这些信息,而且每天都会增加新的人员记录,我是要按我的格式然后导出excel表格形式出来,