2

我有一个Personal带有一LastName列和一个MaybeUniqueID. 我想输出一个带有一LastName列的表,其中设置在该列上的计数器MaybeUniqueID提供超过 1 行。

  • 我想在一次独特的运行中完成所有事情,避免中间步骤输出。
  • 我更喜欢不使用临时表或表变量,否则我想最多使用一个表变量(不是临时表),但我认为这不是必需的。
  • 我正在使用 Microsoft SQL Server 2005。

HAVING我用不同的 SQL 语句(如or )尝试了不同的场景GROUP BY,但我没有得到我想要的结果。请查看以下不起作用的摘要测试:

SELECT LastName
FROM   Personal
       JOIN
              (SELECT  MaybeUniqueID AS ID2,
                       COUNT(*)      AS CNT
              FROM     Personal
                       --WHERE CNT > 1
              GROUP BY MaybeUniqueID
              HAVING   cnt > 1
              ) AS MultiMaybeUniqueID
       ON     Personal.MaybeUniqueID = MultiMaybeUniqueID.ID2
4

1 回答 1

4

HAVING cnt > 1应该是HAVING COUNT(*) > 1

列别名只能在子句中引用,ORDER BY不能在HAVING子句中引用。

虽然你也可以使用

;WITH T AS
(
SELECT LastName,
       COUNT(*) OVER (PARTITION BY MaybeUniqueID) AS Cnt
FROM Personal
)
SELECT LastName
FROM T 
WHERE Cnt > 1
于 2012-08-17T14:49:59.203 回答