2012-10-27 44 views
2

我有一個問題,努力使新列的別名,並在GROUP使用它BY子句:SQL別名給「invalide列名」集團通過

SELECT TOP 100 Percent 
count(id) AS [items_by_day],  
(SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, [date]))) AS [date_part] 
FROM [MyDB].[dbo].[MyTable] 
GROUP BY DAY([date]), MONTH([date]), YEAR([date]), date_part 

我收到以下錯誤:

Msg 207, Level 16, State 1, Line 5 
Invalid column name 'date_part'. 

怎樣才能解決這個問題?

+0

謝謝你的回答。我用datediff檢查了部件,它按我的預期工作。問題在於此代碼之前工作過,但是當我添加聚合函數和group by子句時,它開始顯示原始帖子中描述的錯誤。 –

回答

4

子查詢如何?

見我demo at sqlfiddle

Select Count(*) as nrOfRecords, sq.[items_by_day], sq.[date_part] 
From (
    SELECT TOP 100 Percent count(id) AS [items_by_day] 
     ,(Select Dateadd(dd, 0, Datediff(dd, 0, [date]))) AS [date_part] 
    From [MyTable] 
    Group By id, date 
) as sq 
Group by sq.[items_by_day], sq.[date_part] 

的部分(SELECT DateAdd(... DateDiff(...))彷彿回到平原日期。你能解釋我錯過了什麼嗎?

+0

謝謝你的回答。最後,它的工作。 –

+0

很高興我能幫到你。你可以幫我一個忙嗎?給我一個暗示dateadd datediff是做什麼的? 謝謝 – surfmuggle

+0

這個想法是從日期時間字段獲取日期部分,然後使用此字段進一步聚合。我使用的日期時間包含精確的日期時間戳,但我想每天彙總數據。順便說一句,有沒有更有效和便捷的方法來做到這一點?謝謝。 –

1

您不能在GROUP BY中使用列別名,別名用於顯示,除非別名在子查詢中,在這種情況下,它將成爲列名稱。