0

昨天我问了一个复杂查询的问题,我得到了一个例子。我真的很想让它工作,但其中有一个我无法弄清楚的语法错误。请记住,本周早些时候我刚刚被介绍给 CTE,所以希望这很容易。

我认为我不需要在这里发布完整的代码,所以我只是总结一下

 with cte as (select dateadd(hour, 1, cast(cast(getdate() -1 as date) as datetime)) as midnnight),
 allhours as (
 select 0 as hour, midnight as timestart, dateadd(hour, 1, timestart) as timeend from cte union all
 select 1 as hour, dateadd(hour, 1, midnight), dateadd(hour, 2, midnight) from cte union all
 ....
 select 23 as hour, dateadd(hour, 23, midnight), dateadd(hour, 24, midnight) from cte union all
) 
select ah.hour,...

(...) 表示我省略的不必要的代码,以减少混乱

但是我在 select 23 和 select ah.hour "Incorrect syntax near ')' 之间的括号上出现语法错误。期待 SELECT 或 '('。

任何帮助是极大的赞赏。

-J

4

2 回答 2

1

您有一些语法错误,包括UNION ALL底部不需要的 a ,并且您的第一个SELECTallhours引用别名,所以试试这个:

;with cte as 
(
  select dateadd(hour, 1, cast(cast(getdate() -1 as date) as datetime)) as midnight
),
allhours as 
(
  select 0 as hour, midnight as timestart, dateadd(hour, 1, midnight) as timeend 
  from cte 
  union all
  select 1 as hour, dateadd(hour, 1, midnight), dateadd(hour, 2, midnight) 
  from cte 
  union all
  select 23 as hour, dateadd(hour, 23, midnight), dateadd(hour, 24, midnight) 
  from cte
) 
select *
from allhours

SQL Fiddle with Demo

于 2012-09-13T12:11:16.277 回答
0

Union all你应该在这里摆脱最后一个

 hour, dateadd(hour, 23, midnight), dateadd(hour, 24, midnight) from cte union all 
)  
select ah.hour,... 

另外,在第一行拼写午夜

于 2012-09-13T12:11:35.597 回答