2015-01-16 53 views
0

使用显示的查询时,出现错误。不支持Declare SQL构造或语句

不支持Declare SQL构造或语句。

帮我找到一个合适的解决方案。

DECLARE @maxcount1 float 
DECLARE @maxcount0 float 
DECLARE @start datetime 
SET @start = getdate() - 2 
DECLARE @end datetime 
SET @end= getdate() + 2 

SELECT @maxcount1 = max(OnTimeCount),@maxcount0 = max(DueTimeCount) 

FROM (SELECT DISTINCT COUNT(DISTINCT CASE WHEN ontime = 1 THEN sl_no END) AS OnTimeCount, COUNT(DISTINCT CASE WHEN ontime = 0 THEN sl_no END) AS DueTimeCount FROM tbl_splited_details 

WHERE (uploaded_date BETWEEN @start AND @end) GROUP BY Site_ID) AS s 

SELECT DISTINCT Site_ID, OnTimeCount, DueTimeCount, 
round((cast((OnTimeCount*100) AS float)/@maxcount1), 2)AS percentage1 , round((cast((DueTimeCount *100)AS float)/@maxcount1), 2) AS percentage0 

FROM (SELECT DISTINCT Site_ID, COUNT(DISTINCT CASE WHEN ontime = 1 THEN sl_no END) AS OnTimeCount, 
COUNT(DISTINCT CASE WHEN ontime = 0 THEN sl_no END) AS DueTimeCount 

FROM tbl_splited_details WHERE (uploaded_date BETWEEN @start AND @end) GROUP BY Site_ID) AS s          
+0

您使用的是哪个版本的SQL Server? –

+0

@ kpa6uk:SQL Server 2005 – Reshma

+0

@ kpa6uk:我在我的查询中应用了你的答案。但错误仍然存​​在。 – Reshma

回答

3

据我所看到的,使用此语法:

DECLARE @start datetime = getdate() - 2 

这DECLARE语法只适用于SQL Server 2008和上是支持的。 对于使用SQL Server 2005的情况,您必须使用较老的语法:

DECLARE @start datetime 
SET @start = getdate() - 2 
+1

@marc_s:要非常清楚,这个能力是在一个语句中声明和赋值*。在旧版本中,您可以在一行上声明和分配,在declare和set之间插入分号。 –