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 の間のかっこで構文エラーが発生します。

どんな助けでも大歓迎です。

-J

4

2 に答える 2

1

UNION ALL下部に不要なを含むいくつかの構文エラーがあり、最初SELECTのエラーallhoursはエイリアスを参照していたので、これを試してください。

;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 FiddlewithDemoを参照してください

于 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 に答える