Sql Subselect失败,但在视图工作时

Sql Subselect失败,但在视图工作时,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我希望运行一个查询并从中得到结果。但是,MSSQL抱怨组关键字附近有语法错误。 我希望能做到以下几点 SELECT COUNT(*) AS cnt,Field_2 FROM (SELECT DISTINCT Field_1, Field_2 FROM Table_1) GROUP BY Field_2 HAVING COUNT(*) > 1 相反,我必须创建一个带有查询的视图,视图_1 SELECT DISTINCT Field_1, Fiel

我希望运行一个查询并从中得到结果。但是,MSSQL抱怨
关键字附近有语法错误。 我希望能做到以下几点

  SELECT COUNT(*) AS cnt,Field_2
    FROM (SELECT DISTINCT Field_1, Field_2 
            FROM Table_1)
GROUP BY Field_2 
  HAVING COUNT(*) > 1
相反,我必须创建一个带有查询的视图,视图_1

SELECT DISTINCT Field_1, Field_2 
  FROM Table_1
然后做一个

  SELECT COUNT(*) AS cnt, Field_2
    FROM View_1
GROUP BY Field_2 
  HAVING COUNT(*) > 1
问题是,在我看来,为什么它本质上是相同的SQL


注意:字段、表和视图名称已更改,以保护无辜者。;-)

SQL Server要求您为派生表/内联视图指定表别名:

  SELECT COUNT(*) AS cnt, 
         x.Field_2
    FROM (SELECT DISTINCT Field_1, Field_2 
            FROM Table_1) AS x
GROUP BY x.Field_2 
  HAVING COUNT(*) > 1

OMG小马的答案是100%正确

我认为这将显示相同的结果,但我现在无法测试:

SELECT COUNT(DISTINCT Field_1) AS cnt
     , Field_2
FROM Table_1
GROUP BY Field_2 
HAVING COUNT(DISTINCT Field_1) > 1

公平地说,不能将这种糟糕的语言设计归咎于SQL Server,因为它是在标准SQL-92中指定的。在他的著作中,总是使用贬义的表关联名称(SQL-92中的其他名称;'alias'是口语:),例如
toots\u GNASHER