【问题标题】:how can I solve error 207, level 1 invalid column domain如何解决错误 207,级别 1 无效列域
【发布时间】:2021-12-10 20:51:51
【问题描述】:

我的查询遇到问题。我的表中的 group by 语句有“域”我收到错误:

错误 207,级别 16,状态 1,列名“域”无效。

如果我没有域名,那没问题。

select email, stuff(email, 1, charindex('@', email) , '') as domain
FROM [dbo].[Testdatabase]
group by email,domain

这背后的想法是为每封电子邮件设置一个域名。

【问题讨论】:

  • 你想在这里做什么?向我们展示一些示例表数据和预期结果 - 全部为格式化文本,而不是图像。 minimal reproducible example
  • @yassine 你能检查我的答案吗?

标签: sql group-by


【解决方案1】:

你能试试这个吗:

select email, stuff(email, 1, charindex('@', email) , '') as domain

FROM [dbo].[Testdatabase]

group by email,stuff(email, 1, charindex('@', email) , '')

【讨论】:

  • 我也想把结果放到另一个新表中,我们称之为[Testdatabasenew],我该怎么做?
  • INSERT INTO Testdatabasenew select email, stuff(email, 1, charindex('@', email) , '') as domain FROM [dbo].[Testdatabase] group by email,stuff(email, 1、charindex('@', email) , '')
  • 我应该先创建表 [Testdatabasenew] 吗?
  • select email, stuff(email, 1, charindex('@', email) , '') 作为域 INTO [dbo].[Testdatabasenew] FROM [dbo].[Testdatabase] group by email ,stuff(email, 1, charindex('@', email) , '') 这个查询将创建
  • 非常感谢 :-))
【解决方案2】:

我希望您对 SQL 中的执行顺序有所了解。 SELECT 子句将在 GROUP BY 子句之后执行。因此,别名尚未应用。 编写如下查询:

select email, stuff(email, 1, charindex('@', email) , '') as domain
FROM [dbo].[Testdatabase]
group by email, stuff(email, 1, charindex('@', email) , '')

【讨论】:

  • 非常感谢你@Arun
【解决方案3】:

感谢 @Beso 的快速帮助。我也找到了另一种解决方案,是这样的:

选择电子邮件、域 FROM [dbo].[测试数据库] 交叉应用(选择东西(电子邮件,1,charindex('@',电子邮件),'')作为域)别名 按电子邮件、域分组

【讨论】:

  • 跳过 GROUP BY,只需执行 SELECT DISTINCT:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
相关资源
最近更新 更多