首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这样的难题哪位高手会解决,难题都是相对而言!

2012-01-13 
这样的难题谁会解决,难题都是相对而言!急!急!表A的字段定义如下:站号类型代码监测时间监测值varchar(10)va

这样的难题谁会解决,难题都是相对而言!急!急!
表A   的字段定义如下:
    站号                               类型代码                   监测时间                               监测值
varchar(10)               varchar(10)               datetime                                 float
01A01                             01001                   2007-1-10   10:20:00                     2.24
01A02                             01002                   2007-1-10   10:20:00                     13
02A01                             01003                   2007-1-10   10:20:00                     6.57
02A02                             01004                   2007-1-10   10:20:00                     3.59
03A01                             01002                   2007-1-10   10:20:00                     16
03A04                             01003                   2007-1-10   10:20:00                     5.87

表B   的字段定义如下:  
      站号                         报警开始时间                               报警结束时间              
varchar(10)                   datetime                                         datetime                    
01A01                         2007-1-10   10:20:00                   2007-1-10   10:30:00
01A02                         2007-1-10   10:10:00                   2007-1-10   10:20:00      
02A02                         2007-1-10   10:10:00                   2007-1-10   10:15:00
03A01                         2007-1-10   10:10:00                   2007-1-10   10:15:00      


03A01                         2007-1-10   10:20:00                   2007-1-10   10:30:00
03A04                         2007-1-10   10:20:00                   2007-1-10   10:25:00            


我想要根据查询的天数来得到这样的记录:
下面就是2007-1-10   这一天的
站号                 报警次数                 报警持续时间
01A01                     1                           00:10:00
01A02                     1                           00:10:00
02A02                     0                           00:00:00
03A01                     2                           00:15:00
03A04                     0                           00:00:00



[解决办法]
修改下,加入A表和查詢時間

Create Table A
(站号varchar(10),
类型代码varchar(10),
监测时间datetime,
监测值float)
Insert A Select '01A01 ', '01001 ', '2007-1-10 10:20:00 ', 2.24
Union All Select '01A02 ', '01002 ', '2007-1-10 10:20:00 ', 13
Union All Select '02A01 ', '01003 ', '2007-1-10 10:20:00 ', 6.57
Union All Select '02A02 ', '01004 ', '2007-1-10 10:20:00 ', 3.59
Union All Select '03A01 ', '01002 ', '2007-1-10 10:20:00 ', 16
Union All Select '03A04 ', '01003 ', '2007-1-10 10:20:00 ', 5.87

Create Table B
(站号varchar(10),
报警开始时间datetime,
报警结束时间 datetime)
Insert B Select '01A01 ', '2007-1-10 10:20:00 ', '2007-1-10 10:30:00 '
Union All Select '01A02 ', '2007-1-10 10:10:00 ', '2007-1-10 10:20:00 '
Union All Select '02A02 ', '2007-1-10 10:10:00 ', '2007-1-10 10:15:00 '
Union All Select '03A01 ', '2007-1-10 10:10:00 ', '2007-1-10 10:15:00 '
Union All Select '03A01 ', '2007-1-10 10:20:00 ', '2007-1-10 10:30:00 '
Union All Select '03A04 ', '2007-1-10 10:20:00 ', '2007-1-10 10:25:00 '
GO
Select
站号,
报警次数,
Right(100 + 报警持续时间 / 60, 2) + ': ' + Right(100 + 报警持续时间 % 60, 2) + ':00 ' As 报警持续时间
From
(
Select
A.站号,
Count(B.站号) As 报警次数,
IsNull(SUM(DateDiff(mi, B.报警开始时间, B.报警结束时间)), 0) As 报警持续时间
From
A
Left Join
B
On A.站号 = B.站号
Where DateDiff(dd, A.监测时间, '2007-1-10 ') = 0


Group By A.站号
) T
Order By 站号
GO
Drop Table A, B
--Result
/*
站号报警次数报警持续时间
01A01100:10:00
01A02100:10:00
02A01000:00:00
02A02100:05:00
03A01200:15:00
03A04100:05:00
*/

热点排行