2012-09-13 8 views
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,... 

을 요약거야 (...) 나는

을 덜 지저분하게 생략 불필요한 코드를 나타냅니다

는하지만 선택 (23) 사이의 괄호에 구문 오류를 받고 ')'근처 ah.hour "잘못된 구문을 선택합니다. SELECT 기대, 또는 '('하고있다.

를 어떤 도움을 크게 감사합니다.

-J

답변

1

당신은 하단에 필요하지 않은 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 

SQL Fiddle with Demo 참조

+0

감사합니다. bluefeet 덕분에 많은 도움이되었습니다. – Brandon

0

현재 마지막 Union all

hour, dateadd(hour, 23, midnight), dateadd(hour, 24, midnight) from cte union all 
) 
select ah.hour,... 
제거한다

또한 첫 번째 줄에서 자정을 맞습니다.

+0

대단히 감사합니다 podiluska! – Brandon

+0

@ bluefeet의 답변이 더 완벽하다고 생각합니다 .- 그 대신에 받아 들여야합니다. – podiluska

+0

@podiluska 역시 답장을하지만, 아직은 평판이 좋지 않습니다. 죄송합니다 :/ – Brandon