2014-10-16 45 views
-1

即使使用DISTINCT,我仍然会在[CONMAT_MATCHING_DONOR]上看到重复的内容。即使在使用DISTINCT之后,为什么仍然会在[CONMAT_MATCHING_DONOR]上重复?

SELECT TOP 1000 [CONTRIB_MATCH_ID] 
      ,[CONMAT_CONTRIBUTION] 
      ,[CONMAT_FORM_RECEIVED_DATE] 
      ,[CONMAT_MATCHING_DONOR] 
      ,[CONMAT_STATUS] 
      ,[STATUS_DESC] 
      ,[CONMAT_STATUS_DATE] 
     FROM [ods_production].[dbo].[SPT_CONTRIB_MATCH] 
     WHERE [CONMAT_MATCHING_DONOR] IN (SELECT DISTINCT 
      [CONMAT_MATCHING_DONOR] 
      FROM [ods_production].[dbo].[SPT_CONTRIB_MATCH]) 
    ORDER BY [CONMAT_MATCHING_DONOR] DESC 
+2

尝试添加不同的外部查询 – geoandri 2014-10-16 13:14:02

+0

你有什么表信息可以发布?还有一些结果?你认为什么是“重复”? – Jake 2014-10-16 13:14:43

+0

该列的GROUP或PARTITION。 – 2014-10-16 13:16:08

回答

1

你的IN子句中的DISTINCT使用并没有太大的意义 - 这会不会影响你的查询结果以任何方式。

考虑:

WITH v_base(name) AS (
    SELECT 'A' UNION ALL 
    SELECT 'A' UNION ALL 
    SELECT 'B') 
SELECT name FROM v_base WHERE name IN (SELECT DISTINCT name from v_base) 

这或多或少转换为

WITH v_base(name) AS (
    SELECT 'A' UNION ALL 
    SELECT 'A' UNION ALL 
    SELECT 'B') 
SELECT name FROM v_base WHERE name IN ('A', 'B') 

VS

WITH v_base(name) AS (
    SELECT 'A' UNION ALL 
    SELECT 'A' UNION ALL 
    SELECT 'B') 
SELECT DISTINCT name FROM v_base WHERE name IN (SELECT name from v_base) 

其转换为

WITH v_base(name) AS (
    SELECT 'A' UNION ALL 
    SELECT 'A' UNION ALL 
    SELECT 'B') 
SELECT DISTINCT name FROM v_base WHERE name IN ('A', 'A', 'B') 

和差异应该变得清楚。

SQL Fiddle

+0

感谢man.Appreciate帮助。 。得到它的工作 – jeraldo 2014-10-16 17:15:08

相关问题