2015-06-12 71 views
1
FUNDFAMILY_ID FUND_NAME    REPORTSECTION_ID   
-------------------------------------------------------------- 
172295295 VANGUARD GROWTH FUND (Retail) 126345 
172295295 VANGUARD GROWTH FUND (Retail) 126354 
-------------------------------------------------------------- 

但我需要得到的结果如下图所示:如何获得不同的记录SQLSERVER

FUNDFAMILY_ID  FUND_NAME     REPORTSECTION_ID 
-------------------------------------------------------------- 
172295295 VANGUARD GROWTH FUND (Retail) 126345 

内部存储过程我有一个查询像下面这给重复的行

INSERT INTO #TABLE_REPORTSECTIONDATA (FUND_NAME, FUNDFAMILY_ID, REPORTSECTION_ID) 

       SELECT DISTINCT @FUNDNAME_TEMP , @FUNDID_TEMP, EntryPointViewsId 
       FROM EntryPointViews EPV 
       ORDER BY EntryPointViewsId 

DISTINCT关键字不给我正确的结果。请建议

+1

行为如预期。由于AnotherId在这些行中不同,因此会得到两行。 也许你的业务案例是获得最大或最小anotherid?否则,这将是正确的行为。你能提供详细的信息吗? – Ionic

+0

为什么你想用'126345'而不是'126354'的记录? – AakashM

+0

一次一条记录应插入到数据库。 –

回答

7

DISTINCT正在给你正确的结果,记录ds与您指定的所有列不同。你想要什么?根据ID和说明是否唯一?哪个AnotherID想要从每个组中取出?

如果你只是想要一个任意您可以使用MINMAXGROUP BY

SELECT ID, Description, MIN(AnotherID) 
FROM EntryPointViews EPV 
GROUP BY ID, Description 
+0

为我工作谢谢@蒂姆 –

1

我认为你正在寻找ROW_NUMBER()使用分区,这个查询应该为你工作:

SELECT FUNDFAMILY_ID, FUND_NAME, REPORTSECTION_ID 
FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY FUNDFAMILY_ID ORDER BY REPORTSECTION_ID) AS RN, FUNDFAMILY_ID, FUND_NAME, REPORTSECTION_ID, EntryPointViewsId 
    FROM EntryPointViews EPV 
    ) AS T 
WHERE RN = 1 
ORDER BY EntryPointViewsId;