首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套common-table-expression的语法

嵌套common-table-expression的语法
EN

Stack Overflow用户
提问于 2012-09-13 19:44:28
回答 2查看 2K关注 0票数 0

昨天我问了一个关于复杂查询的问题,我得到了一个例子。我真的很想让它工作,但它有一个语法错误,我找不出来。请记住,这周早些时候我刚刚被介绍到CTE,所以希望这是一个简单的。

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

代码语言:javascript
复制
 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之间的括号中得到了一个语法错误:“')‘附近的语法不正确。

任何帮助都是非常感谢的。

-J

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 20:11:16

您有一些语法错误,包括底部不需要的UNION ALL,并且allhours中的第一个SELECT引用了别名,因此请尝试执行以下操作:

代码语言:javascript
复制
;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

票数 1
EN

Stack Overflow用户

发布于 2012-09-13 20:11:36

你应该去掉这里的最后一个Union all

代码语言:javascript
复制
 hour, dateadd(hour, 23, midnight), dateadd(hour, 24, midnight) from cte union all 
)  
select ah.hour,... 

另外,在第一行拼写午夜

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12405498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档