2013-01-20 25 views
2

我在一段時間內不必使用SQL查詢,而且看起來像一個簡單的查詢令我瘋狂。我有一張交易表,我試圖根據各種標準選擇重複。相關的表結構如下:SQL Select:獲取兩列或更多列相同的行

[Transaction] 
* ID   int 
    Transacted datetime 
    Name  nvarchar(50) 
    Description nvarchar(4000) 
    size  bigint 

從這個表,我需要找到名稱/大小的複製品,並報告所有記錄的名字有相同的大小事務,就算日期和說明是不同的。我可以只用名字計數有以下:

SELECT Name, COUNT(Name) AS Count 
FROM  Transaction 
GROUP BY Name 

然後我可以做一個內部聯接上獲得數據的其餘部分:

SELECT data.ID, data.Transacted, data.Name, data.Description, data.Size, counts.Count 
FROM (SELECT Name, COUNT(Name) AS Count 
     FROM Transaction 
     GROUP BY Name) AS counts 
INNER JOIN Transaction AS data ON counts.Name = data.Name 
WHERE  (counts.Count > 1) 
ORDER BY data.Name, data.Transacted 

但很明顯,這是隻給我重複名稱的交易 - 而不是重複名稱和大小的地方。

我正在尋找幫助完成這件作品,以便報告所有數據,其中線條顯示相同名稱和相同尺寸的重複。我可以很容易地將兩欄中的數據合併爲一個結果並與之進行比較,但我不確定這是否是最佳的應用程序。

在此先感謝。

回答

1

在問題的代碼表明您還需要額外的列。要返回所有重複的行Name, size,您可以使用

WITH CTE 
    AS (SELECT *, 
       COUNT(*) OVER (PARTITION BY Name, size) AS Cnt 
     FROM [Transaction]) 
SELECT ID, 
     Transacted, 
     Name, 
     Description, 
     size 
FROM CTE 
WHERE Cnt > 1 
+0

即使我得到一個OVER不支持的錯誤,這個工程很好。這似乎只是一個SQL設計器問題。我得到了正確的結果。非常感謝您的幫助! – tobint

+0

@tobint - 是的,視覺設計師不喜歡一些新的語法。 –

1

將其更改爲

SELECT Name, Size, COUNT(Name) AS Count 
FROM  Transaction 
GROUP BY Name, Size Having COUNT(Name) > 1 
+0

我知道我忘記了一件容易的事。從我觸摸過一個SQL查詢工具開始,這已經過去幾年了。 :) 這就是說,我仍然無法返回這些行的其餘數據。這將返回名稱和計數,但我無法確定這些特定的行(基於ID)。如果我內部連接使用這個作爲子查詢,但加入文件名,我仍然回到行的文件名是相同的,但大小不是。 – tobint