求一条SQL语句

zwfgdlc 2016-03-01 08:59:58
有一组这样的数据

营业额 上班时间 下班时间
2387.5000 2016-02-01 00:06:33.613 2016-02-01 08:08:16.117
1779.0000 2016-02-01 08:08:16.117 2016-02-01 15:58:16.047
3334.0000 2016-02-01 15:58:16.047 2016-02-01 23:55:37.087
2207.0000 2016-02-01 23:55:37.087 2016-02-02 07:58:16.877
3035.0000 2016-02-02 07:58:16.877 2016-02-02 15:54:48.383
3934.5000 2016-02-02 15:54:48.383 2016-02-02 23:53:55.987
2309.0000 2016-02-02 23:53:55.987 2016-02-03 08:02:15.950
2598.0000 2016-02-03 08:02:15.950 2016-02-03 15:49:35.697
3249.0000 2016-02-03 15:49:35.697 2016-02-03 23:55:43.860
2612.0000 2016-02-03 23:55:43.860 2016-02-04 08:02:19.810
2111.5000 2016-02-04 08:02:19.810 2016-02-04 16:06:05.883
3639.0000 2016-02-04 16:06:05.883 2016-02-05 00:06:10.703
2242.0000 2016-02-05 00:06:10.703 2016-02-05 08:01:42.947
2689.5000 2016-02-05 08:01:42.947 2016-02-05 16:04:04.603
3914.0000 2016-02-05 16:04:04.603 2016-02-06 00:09:27.127

比如第一天,三个班营业额
分别为2387.5000, 1779.0000, 3334.0000
我想通过一条语句查询得到这样的结果
早班 中班 晚班 合计 日期
2387.5000, 1779.0000, 3334.0000 7500.5000 2016-02-01

...全文
322 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongsheng10101 2016-03-12
  • 打赏
  • 举报
回复
我那SQL语句区分班次是按这样规定: 上班时间 在6--10点之间:算中班; 在14-18点之间:算晚班; 剩下就是早班了。
dongsheng10101 2016-03-12
  • 打赏
  • 举报
回复
分两步走: 第一步:求出班次与日期: select [营业额], [上班时间], case when convert(varchar(8),[上班时间],8) between '06:00:00' and '10:00:00' then '中班' when convert(varchar(8),[上班时间],8) between '14:00:00' and '18:00:00' then '晚班' else '早班' end [班次], case when convert(varchar(8),[上班时间],8) <='18:00:00' then left( convert(varchar(30),[上班时间],120),10) else left( convert(varchar(30),[上班时间]+1,120),10) end [日期] from 表名 得出结果: 营业额 上班时间 班次 日期 2387.5000 2016-02-01 00:06:33.613 早班 2016-02-01 1779.0000 2016-02-01 08:08:16.117 中班 2016-02-01 3334.0000 2016-02-01 15:58:16.047 晚班 2016-02-01 2207.0000 2016-02-01 23:55:37.087 早班 2016-02-02 3035.0000 2016-02-02 07:58:16.877 中班 2016-02-02 3934.5000 2016-02-02 15:54:48.383 晚班 2016-02-02 2309.0000 2016-02-02 23:53:55.987 早班 2016-02-03 2598.0000 2016-02-03 08:02:15.950 中班 2016-02-03 3249.0000 2016-02-03 15:49:35.697 晚班 2016-02-03 2612.0000 2016-02-03 23:55:43.860 早班 2016-02-04 2111.5000 2016-02-04 08:02:19.810 中班 2016-02-04 3639.0000 2016-02-04 16:06:05.883 晚班 2016-02-04 ------------------------------------------- 第二步,求出你想要的结果:略。 说真的,按你的需求,你这个数据表设计很不合理,拉这个报表很慢,SQL语句也有点复杂。 你的数据表可以这样设计: 日期(yyyy-mm-dd)、早班上下班时间(两字段)、早班营业额、中班上下班时间(两字段)、中班营业额、晚班上下班时间(两字段)、晚班营业额 或这样设计: 日期(yyyy-mm-dd)、班次(早、中、晚)、上班时间、下班时间、营业额 具体怎么设计,得按你实际需求来设计。
lixiaolong6832 2016-03-03
  • 打赏
  • 举报
回复
ITH C(turnOver, Datee, Timee) AS ( select turnover, CONVERT(varchar(100), StartTime, 105), CASE WHEN CONVERT(varchar(100),StartTime, 24) < '12:0:0' THEN 'morning' WHEN CONVERT(varchar(100),StartTime, 24) < '18:0:0' THEN 'noon' WHEN CONVERT(varchar(100),StartTime, 24) < '24:0:0' THEN 'night' end AS tt from dbo.test ) select sum(case Timee WHEN 'morning' THEN turnover end) AS '早班', sum(case Timee WHEN 'noon' THEN turnover end) AS '中班', sum(case Timee WHEN 'night' THEN turnover end) AS '晚班', sum(turnover) AS '总计', datee AS'日期' from C GROUP BY Datee
octwind 2016-03-03
  • 打赏
  • 举报
回复
WITH C(turnOver, Datee, Timee) AS ( select turnover, CONVERT(varchar(13), StartTime, 120) datee, CASE WHEN right(CONVERT(varchar(13), StartTime, 120),2) >= '00' and right(CONVERT(varchar(13), StartTime, 120),2) < '08' THEN 'morning' WHEN right(CONVERT(varchar(13), StartTime, 120),2) >= '08' and right(CONVERT(varchar(13), StartTime, 120),2) < '16' THEN 'noon' WHEN right(CONVERT(varchar(13), StartTime, 120),2) >= '16' and right(CONVERT(varchar(13), StartTime, 120),2) <= '23' THEN 'night' end AS tt from dbo.test ) select sum(case Timee WHEN 'morning' THEN turnover else 0 end) AS '早班', sum(case Timee WHEN 'noon' THEN turnover end) AS '中班', sum(case Timee WHEN 'night' THEN turnover end) AS '晚班', sum(turnover) AS '总计', datee AS'日期' from C GROUP BY Datee
zwfgdlc 2016-03-02
  • 打赏
  • 举报
回复
引用 2 楼 中国风的回复:
班别的时间范围是?
每8小时一班,早班0-8,中班8-16,晚班16-0
中国风 2016-03-02
  • 打赏
  • 举报
回复
班别的时间范围是?
zwfgdlc 2016-03-02
  • 打赏
  • 举报
回复
算了,还是在程序里处理吧
Xiiiiin 2016-03-01
  • 打赏
  • 举报
回复
WITH C(turnOver, Datee, Timee) AS ( select turnover, CONVERT(varchar(100), StartTime, 105), CASE WHEN CONVERT(varchar(100),StartTime, 24) < '12:0:0' THEN 'morning' WHEN CONVERT(varchar(100),StartTime, 24) < '18:0:0' THEN 'noon' WHEN CONVERT(varchar(100),StartTime, 24) < '24:0:0' THEN 'night' end AS tt from dbo.test ) select sum(case Timee WHEN 'morning' THEN turnover end) AS '早班', sum(case Timee WHEN 'noon' THEN turnover end) AS '中班', sum(case Timee WHEN 'night' THEN turnover end) AS '晚班', sum(turnover) AS '总计', datee AS'日期' from C GROUP BY Datee 测过了,效果一样

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧