2015-05-11 49 views
4

我有一個包含兩列在這裏我要退房的duplicates.I表已經寫代碼重複,這是重複驗證在SQL

 DbCommand cmd = db.GetSqlStringCommand("SELECT MyTable.* FROM MyTable. INNER JOIN(SELECT MainUrl, COUNT(*) as counter FROM MyTable GROUP BY MainUrl HAVING COUNT(*) >1) t ON t.MainUrl=MyTable.MainUrl"); 
     int count = db.ExecuteNonQuery(cmd); 
     DataSet ds = db.ExecuteDataSet(cmd); 
     return ds; 

而在我的專欄我有Amazon.com, http://Amazon.com,https://Amazon.com.I想即使這兩個duplicates.I想要回我從我的那些代碼duplicates.But我不能達到這個表中的所有列,任何人都可以幫助我從這個

+0

'https'怎麼樣?你的桌子上也有這個嗎?如果這也匹配? – ughai

+0

是的,我看到我更新的問題 –

回答

1

使用CHARINDEXSUBSTRING

它認爲'amazon.com',http://amazon.com'https://amazon.com'是重複的。

WITH MyTable(OriginalURL) AS(
    SELECT 'http://Amazon.com' UNION ALL 
    SELECT 'https://Amazon.com' UNION ALL 
    SELECT 'Amazon.com' UNION ALL 
    SELECT 'http://Stackoverflow.com' UNION ALL 
    SELECT 'Stackoverflow.com' UNION ALL 
    SELECT 'http://google.com' 
) 
SELECT 
    CASE 
     WHEN CHARINDEX('http://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 8, LEN(OriginalURL) - 7) 
     WHEN CHARINDEX('https://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 9, LEN(OriginalURL) - 8) 
     ELSE OriginalURL 
    END AS OriginalURL 
    , COUNT(*) AS DupeCount 
FROM MyTable 
GROUP BY 
    CASE 
     WHEN CHARINDEX('http://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 8, LEN(OriginalURL) - 7) 
     WHEN CHARINDEX('https://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 9, LEN(OriginalURL) - 8) 
     ELSE OriginalURL 
    END 
HAVING COUNT(*) > 1 
+0

我想在gridview中代表所有這三個url,所以我想要所有這三個urls但不是一個 –

0

考慮到一個字段。我們可以用這個:

SELECT field, Count(*) FROM table 
GROUP BY field 
HAVING Count(*) > 1 
ORDER BY Count /*optional DESC*/