Tsql SQL别名给出了;“无效列名称”;分组

Tsql SQL别名给出了;“无效列名称”;分组,tsql,Tsql,我在尝试为新列创建别名并在GROUP BY子句中使用它时遇到问题: 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 我得到以下错

我在尝试为新列创建别名并在GROUP BY子句中使用它时遇到问题:

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'.
如何解决这个问题?

子查询如何? 看我的


该部分似乎返回了简单的日期。您能解释一下我遗漏了什么吗?

您不能在GROUP BY中使用列别名,别名用于显示,除非别名位于子查询中,在这种情况下,它将成为列名。

谢谢您的回答。我用datediff检查了这个部件,它按我的预期工作。问题是,这段代码以前工作过,但当我添加聚合函数和GROUPBY子句时,它开始显示原始帖子中描述的错误。很高兴我能提供帮助。你能帮我个忙,给我一个提示dateadd datediff做什么?感谢这个想法是从datetime字段中获取一个日期部分,然后使用这个字段进行进一步的聚合。我使用的日期时间包含精确的日期时间戳,但我希望每天聚合数据。顺便问一下,有没有更有效、更方便的方法?谢谢。对不起,我不知道如何有效地处理日期-但为什么不测试stackoverflow:提出一个新问题-例如:如何有效地计算SQL Server中日期字段的日差?我认为还有一个分支存在类似问题:
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]