大家好,今天在做查询的时候遇到一个问题,自己是了很多遍弄不出来,特来求救,
比如一张表保存图书的进出,图书可能是一本,可能是一箱,一箱书有先申请来拿,可同意,可拒绝,如果那箱书不存在管理员肯定会拒绝申请的,或别的问题,
每一次操作操作一次数据库,一箱书里面有多少本书就插入多少条数据,箱子ID相同,和创建这次事件的事件相同。
但是同一个箱子id可能,有同意的状态,有拒绝的状态,有正在申请的状态,但是肯定时间是不对的,
状态0代表申请,1代表同意,2代表拒绝,现在需要做的事相同boxid,相同createtime,相同status显示为一条,
但是同一箱书拒绝过多次也作为一条,并显示已经拒绝了几次,同理同意过多少次也统计出同意过多少次,并以一条显示,
MS SQL

解决方案 »

  1.   


    select boxid,createtime,boxstatus,count(1) times
    from tb
    group by boxid,createtime,boxstatus
    这样?
      

  2.   

    这一步我也走到过,是能拿到每一次事件的时间,和boxid但是其他信息怎么获取,如果能以此为条件拿到每一次事件中的TID就好了,然后再根据TID查询整条数据。
      

  3.   

    如果按boxid分组后有多个tid,不知道楼主要哪个tid。建议:select *,
    (select count(1) from tablename where boxid=t.boxid and boxstatus=0) as 申请次数,
    (select count(1) from tablename where boxid=t.boxid and boxstatus=1) as 同意次数,
    (select count(1) from tablename where boxid=t.boxid and boxstatus=2) as 拒绝次数
    from tablename t
      

  4.   


    就像如果能把null的以时间为条件相同就填充进去就好了。
      

  5.   

    如果按boxid分组后有多个tid--如果按照时间与boxid分组后得到的有多个tid那么随便取中间一个都可以,因为这个tid的boxid createid 与status是一样的。
      

  6.   

    把上面的数据给个脚本,然后告诉我你想要的结果,图中数据只有两个boxid,以此数据为例,你要什么样的结果?
      

  7.   

    SELECT * FROM (SELECT boxid,createtime FROM TestTable WHERE boxid='1234-OD-20130628095548' GROUP BY boxid,createtime) tt LEFT OUTER JOIN (SELECT TOP 1 * FROM TestTable ) ta ON tt.createtime=ta.createtime
    我自己查询了只填充了一条,如果能根据时间,boxid,status填充另外两条就好了,
    就是先分组,然后以分组数据为标准拿到分组中的其中一条详细信息,呃,语文似乎不太好,不知道版主理解没。
      

  8.   

    CREATE TABLE [dbo].[TestTable](
    [TID] [uniqueidentifier] NULL,
    [BOXID] [nvarchar](50) NULL,
    [BOOKID] [uniqueidentifier] NULL,
    [StudentName] [nvarchar](50) NULL,
    [CreateTime] [datetime] NULL,
    [BoxStatus] [int] NULL
    ) ON [PRIMARY]insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 09:56:04.187',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 09:56:04.187',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 09:56:04.187',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 09:56:57.800',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 09:56:57.800',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 09:56:57.800',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 10:03:05.907',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 10:03:05.907',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('1234-OD-20130628095548','yml','2013-06-28 10:03:05.907',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 16:48:10.037',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 16:48:10.037',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 16:51:46.423',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 16:51:46.423',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:11:33.970',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:11:33.970',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:14:13.410',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:14:13.410',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:22:01.160',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:22:01.160',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:30:28.927',0)
    insert TestTable(BOXID,StudentName,CreateTime,BoxStatus) values ('doee-OD-20130618163055','ddzz1.com','2013-06-18 17:30:28.927',0)