2016-05-13 84 views
0

我已經檢查了所有相關的問題,但無法準確找到我需要的。SQL選擇沒有分組的重複值

我需要返回任何數據,其中每個記錄的一個特定字段是相同的,但我不能使用group by,因爲我需要查看所有重複的記錄,我不只需要對它們進行計數。

我使用group byhaving count(field) > 1和各種形式的簡單select並試圖用count()沒有運氣其他方式嘗試。

基本上我需要看到表中的所有內容,除了一個特定的字段具有唯一的值。如果它不是唯一的,我需要查看它。

還有其他where要求,但爲了簡單起見,我不包括他們在這裏。我正在使用SSMS 2008 R2。

感謝

例子:

數據:

Col1 | Col2 | Col3 
---------------------- 
abc  wow  13/05/2016 
abc  wow  10/05/2016 
def  wow  13/05/2016 
ghi  wow  13/05/2016 
ghi  wow  10/05/2016 
jkl  wow  01/01/2016 

預期結果:

Col1 | Col2 | Col3 
---------------------- 
abc  wow  13/05/2016 
abc  wow  10/05/2016 
ghi  wow  13/05/2016 
ghi  wow  10/05/2016 

我期待證明什麼,不具有獨特的價值Col1

+0

一些帶有預期結果的樣本數據將幫助我們更好地理解問題。 –

+0

@GiorgosBetsos我試圖保持它的通用性,對其他人更有用,但我會添加一些數據 – Lyall

回答

3

您可以使用下面的查詢:

SELECT Col1, Col2, Col3 
FROM (
    SELECT Col1, Col2, Col3, 
     COUNT(*) OVER (PARTITION BY Col1) AS cnt 
    FROM mytable) AS t 
WHERE t.cnt > 1 

查詢使用COUNT聚合函數的窗口版本:該功能被應用在Col1分區。外部查詢過濾掉只出現一次的值爲Col1的記錄。

+0

完美謝謝! – Lyall

1

這是不是很清楚你想做什麼,但也許這樣的事情是你在找什麼?

with MyDupes as 
(
    Select MyColumnWithDupes 
     , COUNT(*) as RowCount 
    from SomeTable 
    Group by MyColumnWithDupes 
) 

select * 
from SomeTable st 
join MyDupes md on md.MyColumnWithDupes = st.MyColumnWithDupes 
where md.RowCount > 1