查找重复数据sql server 2008(区分大小写)

时间:2013-05-28 07:14:50

标签: sql sql-server sql-server-2005

我想在数据库中找到重复的数据

我的查询就像这样

SELECT  ID, FK1,FK2,FK3 , COUNT( * ) as duplicate   
FROM Pilkada.dbo.Transaction    
Group by ID, FK1,FK2,FK3    
having COUNT(*) >1

数据会像这样返回

1

但是当我选择数据重复的查询结果时:

2

问题是如何在区分大小写的情况下在sql server上查找重复数据

所以查询可以区分它真的重复与否。

谢谢

  

对不起,我的大四学生只是在玩弄他刚刚展示的数据   链接服务器是真的,服务器是关心敏感的   请标记此问题已结束。

1 个答案:

答案 0 :(得分:3)

使用归类。在下面的示例中,我使用了波兰语校对,但您可以使用另一种。

CI =不区分大小写,AI =重音不敏感,CS =区分大小写,AS =重音敏感

SELECT
    ID,
    FK1 COLLATE Polish_CI_AI,
    FK2 COLLATE Polish_CI_AI,
    FK3 COLLATE Polish_CI_AI,
    COUNT(*) as duplicate
FROM Pilkada.dbo.Transaction    
GROUP BY
    ID,
    FK1 COLLATE Polish_CI_AI,
    FK2 COLLATE Polish_CI_AI,
    FK3 COLLATE Polish_CI_AI 
HAVING COUNT(*) >1

一些例子

CREATE TABLE #t (
    k1 varchar(10)
)

INSERT INTO #t VALUES ('Mars')
INSERT INTO #t VALUES ('mars')
INSERT INTO #t VALUES ('maRs')
INSERT INTO #t VALUES ('MARS')

SELECT *
FROM #t
WHERE k1 = 'mars'

SELECT k1 COLLATE Polish_CS_AS , COUNT(*)
FROM #t
GROUP BY
    k1 COLLATE Polish_CS_AS

SELECT k1 COLLATE Polish_CI_AS , COUNT(*)
FROM #t
GROUP BY
    k1 COLLATE Polish_CI_AS

DROP TABLE #t