Tsql 嵌套公共表表达式的语法
昨天我问了一个复杂的问题,有人给了我一个例子。我真的很想让它工作,但有一个语法错误,我不能弄清楚。请记住,我刚在本周早些时候被介绍给CTE,所以希望这是一个简单的介绍 我不认为我需要在这里发布完整的代码,所以我只做总结Tsql 嵌套公共表表达式的语法,tsql,ssms,common-table-expression,Tsql,Ssms,Common Table Expression,昨天我问了一个复杂的问题,有人给了我一个例子。我真的很想让它工作,但有一个语法错误,我不能弄清楚。请记住,我刚在本周早些时候被介绍给CTE,所以希望这是一个简单的介绍 我不认为我需要在这里发布完整的代码,所以我只做总结 with cte as (select dateadd(hour, 1, cast(cast(getdate() -1 as date) as datetime)) as midnnight), allhours as ( select 0 as hour, midnigh
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之间的括号中得到了一个语法错误
“')”附近的语法不正确。应为SELECT或“(”
非常感谢您的帮助
-J您有一些语法错误,包括底部不需要的
UNION ALL
,并且allhours
中的第一个SELECT
引用了一个别名,请尝试以下操作:
;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
请参见这里的您应该去掉最后一个
Union all
hour, dateadd(hour, 23, midnight), dateadd(hour, 24, midnight) from cte union all
)
select ah.hour,...
另外,在第一行拼写midnight(午夜)非常感谢波迪卢斯卡!我认为@bluefeet的答案更完整-你应该接受这个答案:)我也会投票支持你的答案,@Podi卢斯卡,但我还没有必要的声誉。对不起:/谢谢bluefeet,这帮了大忙!