接另外的一个帖子,那个帖子的问题已经基本解决,现在对剩下的问题再开个帖子请教with cet as(         select '中餐' as Type,'2000-01-01 09:29:00' as BgnTime, '2000-01-01 12:29:00' as EndTime union all select '晚餐' as Type,'2000-01-01 15:29:00' as BgnTime, '2000-01-01 18:29:00' as EndTime union all select '夜宵' as Type,'2000-01-01 21:29:00' as BgnTime, '2000-01-01 23:59:00' as EndTime ) ,CET1 as(select CONVERT(VARCHAR(10),dateadd(MI,-31,[CHECKTIME]),120) 日期,b.Type 餐别,COUNT(distinct UserID) 人数 from CHECKINOUT a, cet b  where CAST(STUFF(CONVERT(VARCHAR(19),dateadd(MI,-31,[CHECKTIME]),120),1,10,'2000-01-01') AS DATETIME) between b.BgnTime and b.EndTime group by CONVERT(VARCHAR(10),dateadd(MI,-31,[CHECKTIME]),120),b.Type ) select * from CET1 a pivot (max(人数) for 餐别 in([中餐],[晚餐],[夜宵]))p 这个功能是实现统计三餐的吃饭人数的,现在的问题里面日期我要怎么设置,因为不管我把日期改成多少 出来的结果都是一样的,而且运行语句到出结果,感觉有点慢。 如果我要查询3月1日到5日的记录并按时间排序,要怎么写?谢谢

解决方案 »

  1.   

    --------------开始查询-------------------------- ;with cet as(         select '中餐' as Type,'2000-01-01 09:29:00' as BgnTime, '2000-01-01 12:29:00' as EndTime union all select '晚餐' as Type,'2000-01-01 15:29:00' as BgnTime, '2000-01-01 18:29:00' as EndTime union all select '夜宵' as Type,'2000-01-01 21:29:00' as BgnTime, '2000-01-01 23:59:00' as EndTime ) ,CET1 as(select CONVERT(VARCHAR(10),dateadd(MI,-31,[CHECKTIME]),120) 日期,b.Type 餐别,COUNT(distinct UserID) 人数 from CHECKINOUT a, cet b  where CAST(STUFF(CONVERT(VARCHAR(19),dateadd(MI,-31,[CHECKTIME]),120),1,10,'2000-01-01') AS DATETIME) between b.BgnTime and b.EndTime group by CONVERT(VARCHAR(10),dateadd(MI,-31,[CHECKTIME]),120),b.Type ) select * from CET1 a pivot (max(人数) for 餐别 in([中餐],[晚餐],[夜宵]))p   ----------------结果---------------------------- /*  日期         中餐          晚餐          夜宵 ---------- ----------- ----------- ----------- 2013-03-04 4           2           1   (1 行受影响)   */
      

  2.   

    那我就不客气了。谢谢楼主--------------开始查询-------------------------- ;with cet as(         select '中餐' as Type,'2000-01-01 09:29:00' as BgnTime, '2000-01-01 12:29:00' as EndTime union all select '晚餐' as Type,'2000-01-01 15:29:00' as BgnTime, '2000-01-01 18:29:00' as EndTime union all select '夜宵' as Type,'2000-01-01 21:29:00' as BgnTime, '2000-01-01 23:59:00' as EndTime ) ,CET1 as(select CONVERT(VARCHAR(10),dateadd(MI,-31,[CHECKTIME]),120) 日期,b.Type 餐别,COUNT(distinct UserID) 人数 from CHECKINOUT a, cet b  where CAST(STUFF(CONVERT(VARCHAR(19),dateadd(MI,-31,[CHECKTIME]),120),1,10,'2000-01-01') AS DATETIME) between b.BgnTime and b.EndTime group by CONVERT(VARCHAR(10),dateadd(MI,-31,[CHECKTIME]),120),b.Type ) select * from CET1 a pivot (max(人数) for 餐别 in([中餐],[晚餐],[夜宵]))p   ----------------结果---------------------------- /*  日期         中餐          晚餐          夜宵 ---------- ----------- ----------- ----------- 2013-03-04 4           2           1   (1 行受影响)   */