2012-09-13 57 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