帮忙写一个sql语句或存储过程!!!!
表:liucheng(流程名称,字符)
riqi(日期,日期)
qssj(起始时间,日期时间)
zzsj(中止时间,日期时间)
要求:
运行峰时时间段 7:30-11:30 15:00-22:00
运行平时时间段 11:30-17:00 5:00-7:30
运行谷时时间段 22:00-5:00
求出各个流程在选择的日期中峰平谷的时间分别求和。
结果:
liucheng,fssj(峰时时间和),pssj,gssj
如: 23流程 202 55 23
表:liucheng(流程名称,字符)
riqi(日期,日期)
qssj(起始时间,日期时间)
zzsj(中止时间,日期时间)
要求:
运行峰时时间段 7:30-11:30 15:00-22:00
运行平时时间段 11:30-17:00 5:00-7:30
运行谷时时间段 22:00-5:00
求出各个流程在选择的日期中峰平谷的时间分别求和。
结果:
liucheng,fssj(峰时时间和),pssj,gssj
如: 23流程 202 55 23
解决方案 »
- 截取图片后。怎么使大小缩小??急!在线等,大家帮帮忙,谢了!
- 如何立即保存环境变量?
- vb+ORCALE时,如何激活带有blob类型的字段
- 我要在水晶报表里用到同数据库里的两个表,怎么弄~
- 急~~ 跪求解 数据库连接问题~
- 菜鸟求助! 如何在VB中调用SQL的数据?
- 读写文件的问题(GetPrivateProfileString,WritePrivateProfileString)
- MShFLEXGRID用rsado得到数据后。在mshflexgrid_click事件中,msgbox mshflexgrid1.row总是返回一?不向没数据源那样,点那行就提示那行?
- 迷茫,请帮我
- 关于null值问题
- 如何用VB写一个不需要注册就可以使用的DLL?在线等候!
- 600分之第2帖
select distinct [liucheng] from TABLE_NAME --声明一个指向流程名称集合的游标OPEN liucheng_cursor --打开流程名称集合
FETCH NEXT FROM liucheng_cursor INTO @liucheng_name --从集合中取一个值,保存在流程名称变量中
WHILE @@FETCH_STATUS = 0 --遍历流程名称集合
begindeclare @fssj int
set @fssj=(select count(*) from TABLE_NAME where [liucheng]=@liucheng_name and (起始时间与中止时间处在峰时时间段条件判断语句……))
declare @pssj int
set @pssj=(select count(*) from TABLE_NAME where [liucheng]=@liucheng_name and (起始时间与中止时间处在平时时间段条件判断语句……))
…………end
close liucheng_cursor --关闭游标
DEALLOCATE liucheng_cursor --删除游标@liucheng_name中存储的是流程名称,@fssj中存储的是峰时时间流程的数量…………
FETCH NEXT FROM liucheng_cursor INTO @liucheng_name --取下一个流程名称
否则会是一个始终统计第一个流程的死循环。
select liucheng,sum(
case when qssj<=convert(nvarchar(11),qssj,121)+'07:30:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'07:30:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'11:30:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'07:30:00',zzsj)
when qssj<=convert(nvarchar(11),qssj,121)+'07:30:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'11:30:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'07:30:00',convert(nvarchar(11),qssj,121)+'11:30:00')
when qssj>=convert(nvarchar(11),qssj,121)+'07:30:00'
and qssj<=convert(nvarchar(11),qssj,121)+'11:30:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'11:30:00'
then datediff(minute,qssj,zzsj)
when qssj>=convert(nvarchar(11),qssj,121)+'07:30:00'
and qssj<=convert(nvarchar(11),qssj,121)+'11:30:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'11:30:00'
then datediff(minute,qssj,convert(nvarchar(11),qssj,121)+'11:30:00')
else '0' end + case when qssj<=convert(nvarchar(11),qssj,121)+'15:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'15:00:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'22:00:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'15:00:00',zzsj)
when qssj<=convert(nvarchar(11),qssj,121)+'15:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'22:00:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'15:00:00',convert(nvarchar(11),qssj,121)+'22:00:00')
when qssj>=convert(nvarchar(11),qssj,121)+'15:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'22:00:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'22:00:00'
then datediff(minute,qssj,zzsj)
when qssj>=convert(nvarchar(11),qssj,121)+'15:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'22:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'22:00:00'
then datediff(minute,qssj,convert(nvarchar(11),qssj,121)+'22:00:00')
else '0' end )/60.00 as 'fssj'
-----------------平时时间----------------------------------------------------
,sum( case when qssj<=convert(nvarchar(11),qssj,121)+'11:30:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'11:30:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'17:00:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'11:30:00',zzsj)
when qssj<=convert(nvarchar(11),qssj,121)+'11:30:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'17:00:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'11:30:00',convert(nvarchar(11),qssj,121)+'17:00:00')
when qssj>=convert(nvarchar(11),qssj,121)+'11:30:00'
and qssj<=convert(nvarchar(11),qssj,121)+'17:00:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'17:00:00'
then datediff(minute,qssj,zzsj)
when qssj>=convert(nvarchar(11),qssj,121)+'11:30:00'
and qssj<=convert(nvarchar(11),qssj,121)+'17:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'17:00:00'
then datediff(minute,qssj,convert(nvarchar(11),qssj,121)+'17:00:00')
else '0' end + case when qssj<=convert(nvarchar(11),qssj,121)+'05:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'05:00:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'07:30:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'05:00:00',zzsj)
when qssj<=convert(nvarchar(11),qssj,121)+'05:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'07:30:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'05:00:00',convert(nvarchar(11),qssj,121)+'07:30:00')
when qssj>=convert(nvarchar(11),qssj,121)+'05:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'07:30:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'07:30:00'
then datediff(minute,qssj,zzsj)
when qssj>=convert(nvarchar(11),qssj,121)+'05:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'07:30:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'07:30:00'
then datediff(minute,qssj,convert(nvarchar(11),qssj,121)+'07:30:00')
else '0' end )/60.00 as 'pssj'
-------------------谷时时间-----------------------------------------------------
,sum( case when qssj<=convert(nvarchar(11),qssj,121)+'22:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'22:00:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'23:59:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'22:00:00',zzsj)
when qssj<=convert(nvarchar(11),qssj,121)+'22:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'23:59:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'22:00:00',convert(nvarchar(11),qssj,121)+'23:59:00')
when qssj>=convert(nvarchar(11),qssj,121)+'22:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'23:59:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'23:59:00'
then datediff(minute,qssj,zzsj)
when qssj>=convert(nvarchar(11),qssj,121)+'22:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'23:59:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'23:59:00'
then datediff(minute,qssj,convert(nvarchar(11),qssj,121)+'23:59:00')
else '0' end + case when qssj<=convert(nvarchar(11),qssj,121)+'00:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'00:00:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'05:00:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'00:00:00',zzsj)
when qssj<=convert(nvarchar(11),qssj,121)+'00:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'05:00:00'
then datediff(minute,convert(nvarchar(11),qssj,121)+'00:00:00',convert(nvarchar(11),qssj,121)+'05:00:00')
when qssj>=convert(nvarchar(11),qssj,121)+'00:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'05:00:00'
and zzsj<=convert(nvarchar(11),qssj,121)+'05:00:00'
then datediff(minute,qssj,zzsj)
when qssj>=convert(nvarchar(11),qssj,121)+'00:00:00'
and qssj<=convert(nvarchar(11),qssj,121)+'05:00:00'
and zzsj>=convert(nvarchar(11),qssj,121)+'05:00:00'
then datediff(minute,qssj,convert(nvarchar(11),qssj,121)+'05:00:00')
else '0' end )/60.00 as 'gssj' from (select distinct * from ddrb2 where convert(varchar(10),qssj,121)>='2002-01-01' and convert(varchar(10),qssj,121) <='2003-6-1' and leibie='运行中') as t1 group by liucheng