【问题标题】:SQL alias gives "invalide column name" for Group BySQL 别名为 Group By 提供“无效的列名”
【发布时间】:2012-10-28 17:56:48
【问题描述】:

我在尝试为新列创建别名并在 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'.

如何解决这个问题?

【问题讨论】:

  • 感谢您的回答。我用 datediff 检查了该部分,它按我的预期工作。问题是这段代码之前可以工作,但是当我添加聚合函数和group by子句时,它开始显示原始帖子中描述的错误。

标签: tsql


【解决方案1】:

子查询怎么样?

见我的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(...)) 部分似乎返回了简单的日期。你能解释一下我错过了什么吗?

【讨论】:

  • 很高兴我能帮上忙。你能帮我一个忙,给我一个提示 dateadd datediff 做什么吗?谢谢
  • 这个想法是从日期时间字段中获取日期部分,然后使用该字段进行进一步聚合。我使用的日期时间包含精确的日期时间戳,但我想每天汇总数据。顺便问一下,有没有更有效和方便的方法来做到这一点?谢谢。
  • 对不起,我不知道有效的日期处理 - 但为什么不将 stackoverflow 用于测试:制定一个新问题 - 例如:如何有效地计算 SQL 中日期字段的日差服务器?
  • 我觉得也有一个分支有类似问题:stackoverflow.com/questions/2629534/…
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多