读书人

求高手帮忙解决 上面情况上 SQL 语句

发布时间: 2012-08-10 12:19:33 作者: rapoo

求高手帮忙解决 下面情况下 SQL 语句
如下图的2张表,有几个特性。
1.两张表的carNum(车牌号) 都是同一个值
2.DepartureTime 这张表 的字段departureTime2 和字段 departureTime 的时间是相同的,只是departureTime2 多了年月日
3.departureTime2 字段和GpsTime 字段的 年月日也是相同的,只是时间不同而已。
4.inOut 字段意思是 进站(用1表示)、出站(用0表示),regionId 为公交站点ID


问:
我现在要组合成一张表,表结构类型
departureTime carNum InTime OutTime RegionName
08:15 闽B02929 2011-11-28 8:10:15 2011-11-28 08:15:30 钟楼站
09:15 闽B02929 2011-11-28 9:10:15 2011-11-28 09:15:30 水部门兜
10:15 。。。。
11:15 。。。
12:15 。。。

附件:


创建2张表脚本。

SQL code
CREATE TABLE [dbo].[DepartureTime](    [departureTime] [varchar](50) NULL,    [departureTime2] [datetime] NULL,    [carNum] [varchar](50) NULL) ON [PRIMARY]GO CREATE TABLE [dbo].[RecordTable](    [carId] [int] NULL,    [carNum] [varchar](50) NULL,    [GpsTime] [datetime] NULL,    [inOut] [int] NULL,    [regionId] [int] NULL,    [RegionName] [varchar](50) NULL) ON [PRIMARY]GO




[解决办法]
SQL code
CREATE TABLE [dbo].[DepartureTime](    [departureTime] [varchar](50) NULL,    [departureTime2] [datetime] NULL,    [carNum] [varchar](50) NULL) ON [PRIMARY]insert into DepartureTime select '08:15','2011-11-28 08:15:00','闽B02929'insert into DepartureTime select '09:15','2011-11-28 09:15:00','闽B02929'insert into DepartureTime select '10:15','2011-11-28 10:15:00','闽B02929'insert into DepartureTime select '11:15','2011-11-28 11:15:00','闽B02929'insert into DepartureTime select '12:15','2011-11-28 12:15:00','闽B02929'CREATE TABLE [dbo].[RecordTable](    [carId] [int] NULL,    [carNum] [varchar](50) NULL,    [GpsTime] [datetime] NULL,    [inOut] [int] NULL,    [regionId] [int] NULL,    [RegionName] [varchar](50) NULL) ON [PRIMARY]insert into RecordTable select 9517,'闽B02929','2011-11-28 08:10:10',1,2728,'钟楼站'insert into RecordTable select 9517,'闽B02929','2011-11-28 08:15:10',0,2728,'钟楼站'insert into RecordTable select 9517,'闽B02929','2011-11-28 09:10:10',1,2751,'水部门兜站'insert into RecordTable select 9517,'闽B02929','2011-11-28 09:16:10',0,2751,'水部门兜站'insert into RecordTable select 9517,'闽B02929','2011-11-28 10:10:10',1,2728,'钟楼站'insert into RecordTable select 9517,'闽B02929','2011-11-28 10:11:10',0,2728,'钟楼站'insert into RecordTable select 9517,'闽B02929','2011-11-28 11:10:10',1,2751,'水部门兜站'insert into RecordTable select 9517,'闽B02929','2011-11-28 11:14:10',0,2751,'水部门兜站'insert into RecordTable select 9517,'闽B02929','2011-11-28 12:10:10',1,2728,'钟楼站'insert into RecordTable select 9517,'闽B02929','2011-11-28 12:15:10',0,2728,'钟楼站'goselect a.departureTime,a.carNum,b.GpsTime as InTime,c.GpsTime as OutTime,b.RegionNamefrom [DepartureTime] a inner join [RecordTable] b on a.carNum=b.carNum and datediff(mi,a.departureTime2,b.GpsTime) between -10 and 10inner join [RecordTable] c on c.carNum=b.carNum and c.RegionName=b.RegionName and datediff(mi,b.GpsTime,c.GpsTime)between 0 and 10where b.inOut=1 and c.inOut=0/*departureTime   carNum           InTime                  OutTime                 RegionName--------------- --------------- ------------------------ ----------------------- ----------------------- --------08:15           闽B02929         2011-11-28 08:10:10.000 2011-11-28 08:15:10.000 钟楼站09:15           闽B02929         2011-11-28 09:10:10.000 2011-11-28 09:16:10.000 水部门兜站10:15           闽B02929         2011-11-28 10:10:10.000 2011-11-28 10:11:10.000 钟楼站11:15           闽B02929         2011-11-28 11:10:10.000 2011-11-28 11:14:10.000 水部门兜站12:15           闽B02929         2011-11-28 12:10:10.000 2011-11-28 12:15:10.000 钟楼站(5 行受影响)*/go--drop table RecordTable,DepartureTime
------解决方案--------------------


SQL code
if object_id('DepartureTime','U') is not null   drop table DepartureTimegocreate table DepartureTime( departureTime varchar(5), departureTime2 datetime, carNum varchar(10))goinsert into DepartureTimeselect '08:15','2011-11-28 08:15:00','闽B02929' union allselect '09:15','2011-11-28 09:15:00','闽B02929' union allselect '10:15','2011-11-28 10:15:00','闽B02929' union allselect '11:15','2011-11-28 11:15:00','闽B02929' union allselect '12:15','2011-11-28 12:15:00','闽B02929'goif object_id('Region','U') is not null   drop table Regiongocreate table Region( cardId int, carNum varchar(10), GpsTime datetime, inOut int, regionId int, RegionName varchar(10))goinsert into Regionselect '9517','闽B02929','2011-11-28 08:10:10',1,2728,'钟楼站' union allselect '9517','闽B02929','2011-11-28 08:15:10',0,2728,'钟楼站' union allselect '9517','闽B02929','2011-11-28 09:10:10',1,2751,'水部门兜站' union allselect '9517','闽B02929','2011-11-28 09:16:10',0,2751,'水部门兜站' union allselect '9517','闽B02929','2011-11-28 10:10:10',1,2728,'钟楼站' union allselect '9517','闽B02929','2011-11-28 10:11:10',0,2728,'钟楼站' union allselect '9517','闽B02929','2011-11-28 11:10:10',1,2751,'水部门兜站' union allselect '9517','闽B02929','2011-11-28 11:14:10',0,2751,'水部门兜站' union allselect '9517','闽B02929','2011-11-28 12:10:10',1,2728,'钟楼站' union allselect '9517','闽B02929','2011-11-28 12:15:10',0,2728,'钟楼站'goselect departureTime,       carNum,       InTime=(select GpsTime from Region where convert(varchar(13),GpsTime,120)=convert(varchar(13),a.departureTime2,120) and inOut=1),       OutTime=(select GpsTime from Region where convert(varchar(13),GpsTime,120)=convert(varchar(13),a.departureTime2,120) and inOut=0),       RegionName=(select distinct RegionName from Region where convert(varchar(13),GpsTime,120)=convert(varchar(13),a.departureTime2,120))from DepartureTime a/*departureTime carNum     InTime                  OutTime                 RegionName------------- ---------- ----------------------- ----------------------- ----------08:15         闽B02929    2011-11-28 08:10:10.000 2011-11-28 08:15:10.000 钟楼站09:15         闽B02929    2011-11-28 09:10:10.000 2011-11-28 09:16:10.000 水部门兜站10:15         闽B02929    2011-11-28 10:10:10.000 2011-11-28 10:11:10.000 钟楼站11:15         闽B02929    2011-11-28 11:10:10.000 2011-11-28 11:14:10.000 水部门兜站12:15         闽B02929    2011-11-28 12:10:10.000 2011-11-28 12:15:10.000 钟楼站(5 行受影响)*/ 

读书人网 >SQL Server

热点推荐