tableAId Type Time7
1 0 2013-01-03 07:00:08
2 1 2013-01-05 01:20:07
3 2 2013-01-09 07:08:02
4 2 2013-01-03 07:07:02
5 2 2013-01-02 07:07:02
tableC
TypeId TypeName
0 AAA
1 BBB
2 CCCtableA的Type字段对应tableC的TypeId字段
我想统计tableA中的Type字段数据为2和0的从2013年1月3日到2013年1月9日的一个时间段(比如07:00:01-08:00:00)这一个小时之内的数据,当然这个只是具体的一个例子,实际情况是日期A到日期B是动态的,时间A到时间B也是动态的,请问这个语句应该怎么写?
1 0 2013-01-03 07:00:08
2 1 2013-01-05 01:20:07
3 2 2013-01-09 07:08:02
4 2 2013-01-03 07:07:02
5 2 2013-01-02 07:07:02
tableC
TypeId TypeName
0 AAA
1 BBB
2 CCCtableA的Type字段对应tableC的TypeId字段
我想统计tableA中的Type字段数据为2和0的从2013年1月3日到2013年1月9日的一个时间段(比如07:00:01-08:00:00)这一个小时之内的数据,当然这个只是具体的一个例子,实际情况是日期A到日期B是动态的,时间A到时间B也是动态的,请问这个语句应该怎么写?
http://bbs.csdn.net/topics/390354937
GO
-->生成表tableA
if object_id('tableA') is not null
drop table tableA
Go
Create table tableA([Id] smallint,[Type] smallint,[Time7] datetime)
Insert into tableA
Select 1,0,'2013-01-03 07:00:08'
Union all Select 2,1,'2013-01-05 01:20:07'
Union all Select 3,2,'2013-01-09 07:08:02'
Union all Select 4,2,'2013-01-03 07:07:02'
Union all Select 5,2,'2013-01-02 07:07:02'
-->生成表tableC
if object_id('tableC') is not null
drop table tableC
Go
Create table tableC([TypeId] smallint,[TypeName] nvarchar(3))
Insert into tableC
Select 0,N'AAA'
Union all Select 1,N'BBB'
Union all Select 2,N'CCC'
go
DECLARE
@startDate DATETIME
,@endDate DATETIME
,@startTime DATETIME
,@endTime DATETIME
,@Type NVARCHAR(MAX)
SELECT
@startDate='2013-01-03'
,@endDate='2013-01-09'
,@startTime='07:00:01'
,@endTime='08:00:00'
,@Type='0,2'
----------------- 1.DECLARE @typeList TABLE(Type SMALLINT)SET @Type='Select '+REPLACE(@Type,',',' Union all Select ')
INSERT INTO @typeList
EXEC (@Type)
SELECT
a.Id,a.Type,b.TypeName,a.Time7
FROM tableA AS a,tableC AS b
WHERE a.Type=b.TypeId
AND EXISTS(SELECT 1 FROM @typeList AS x WHERE a.Type=x.Type)
AND Time7 >=@startDate AND Time7<@endDate+1
AND CONVERT(DATETIME,CONVERT(VARCHAR(9),Time7,108)) BETWEEN @startTime AND @endTime
----------------- 2.EXEC ('
SELECT
a.Id,a.Type,b.TypeName,a.Time7
FROM tableA AS a,tableC AS b
WHERE a.Type=b.TypeId
AND a.Type In('+@Type+')
AND Time7 >='''+@startDate+''' AND Time7<Dateadd(dd,1,'''+@endDate+''')
AND CONVERT(DATETIME,CONVERT(VARCHAR(9),Time7,108)) BETWEEN '''+@startTime+''' AND '''+@endTime+'''
')/*
Id Type TypeName Time7
------ ------ -------- -----------------------
1 0 AAA 2013-01-03 07:00:08.000
3 2 CCC 2013-01-09 07:08:02.000
4 2 CCC 2013-01-03 07:07:02.000
*/
运行出来出错:
'MAX' 附近有语法错误。
必须声明变量 '@Type'。