将表连接到具有计数的表> 1

时间:2012-08-17 14:39:08

标签: sql-server-2005 join uniqueidentifier unique-constraint

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

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

我尝试了不同的SQL语句,例如HAVINGGROUP 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

1 个答案:

答案 0 :(得分: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