2012-08-17 32 views
2

我有一個Personal表,LastName列和MaybeUniqueID。 我想輸出一個表格,其中一列爲LastName列,其中設置在列MaybeUniqueID上的計數器給出多於一行。加入塔爾本身count> 1

  • 我想在一個獨特的運行中做所有事情,避免中階輸出。
  • 我不喜歡使用臨時表或表變量,否則我最多隻想使用一個表變量(不是臨時表),但我認爲這不是必須的。
  • 我使用Microsoft SQL Server 2005

我嘗試了不同的場景與像HAVINGGROUP BY不同的SQL語句,但我沒有得到我要尋找的結果。 請看看以下的未工作總結測試:

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 
+0

爲什麼這不是你期待什麼呢? – cjk 2012-08-17 14:42:23

+0

我想(現在閱讀下面的答案後)問題是別名'cnt'。我應該使用'HAVING COUNT(*)> 1 ' – TPPZ 2012-08-17 15:05:07

回答

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