2014-10-16 79 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

相關問題