2010-07-17 80 views
0

非常感谢您的帮助!如何从我的sql查询中删除重复结果

好吧,我的查询产生重复结果的部分是:

Left Join CMS_ECH.dbo.hsplit hsplit on hsplit.row_date = ANDREWSTABLE.SegStart_Date 
            and hsplit.split = ANDREWSTABLE.dispsplit 
            and hsplit.starttime = ANDREWSTABLE.Interval 

我相信这是由于没有任何主键hsplit表产生重复的结果。虽然我不是管理员,但我无法设置主键。我曾问过,但我想要一个解决方法。

我已经看到了这个岗位作为一个解决方案: SQL - How can I remove duplicate rows?

但是,如何申请,要我下面的查询:

Select segstart 
    ,segment 
    ,callid 
    ,Interval 
    ,dialed_num 
    ,FiscalMonthYear 
    ,SegStart_Date 
    ,row_date 
    ,Name 
    ,Xferto 
    ,TransferType 
    ,Agent 
    ,Sup 
    ,Manager 
    ,'MyCenter' = Case Center 
When 'Livermore Call Center' Then 'LCC' 
When 'Natomas Call Center' Then 'NCC' 
When 'Concord Call Center' Then 'CCC' 
When 'Virtual Call Center' Then 'VCC' 
When 'Morgan Hill Call Center' Then 'MHCC' 
Else Center 
End 
    ,Xferfrom 
    ,talktime 
    ,ANDREWSTABLE.transferred 
    ,ANDREWSTABLE.disposition 
    ,dispsplit 
    ,callid 
    ,hsplit.starttime 
    ,CASE 
    WHEN hsplit.callsoffered > 0 
    THEN (CAST(hsplit.acceptable as DECIMAL)/hsplit.callsoffered)*100 
    ELSE '0' 
    END AS 'Service Level' 
    ,hsplit.callsoffered 
    ,hsplit.acceptable 
FROM 
(
Select segstart, 
    100*DATEPART(HOUR, segstart) + 30*(DATEPART(MINUTE, segstart)/30) as Interval, 
    FiscalMonthYear, 
    SegStart_Date, 
    dialed_num, 
    callid, 
    Name, 
    t.Queue AS 'Xferto', 
    TransferType, 
    RepLName+', '+RepFName AS Agent, 
    SupLName+', '+SupFName AS Sup, 
    MgrLName+', '+MgrFName AS Manager, 
    q.Center, 
    q.Queue AS 'Xferfrom', 
    e.anslogin, 
    e.origlogin, 
    t.Extension, 
    transferred, 
    disposition, 
    talktime, 
    dispsplit, 
    segment 
From CMS_ECH.dbo.CaliforniaECH e 

INNER JOIN Cal_RemReporting.dbo.TransferVDNs t on e.dialed_num = t.Extension 
INNER JOIN InfoQuest.dbo.IQ_Employee_Profiles_v3_AvayaId q on e.origlogin = q.AvayaID 
INNER JOIN Cal_RemReporting.dbo.udFiscalMonthTable f on e.SegStart_Date = f.Tdate 

Where SegStart_Date between getdate()-90 and getdate()-1 
    And q.Center not in ('Collections Center', 
         'Cable Store', 
         'Business Services Center', 
         'Escalations') 
    And SegStart_Date between RepToSup_StartDate and RepToSup_EndDate 
    And SegStart_Date between SupToMgr_StartDate and SupToMgr_EndDate 
    And SegStart_Date between Avaya_StartDate and Avaya_EndDate 
    And SegStart_Date between RepQueue_StartDate and RepQueue_EndDate 
    AND (e.transferred like '1' 
    OR e.disposition like '4') 
) AS ANDREWSTABLE 

Left Join CMS_ECH.dbo.hsplit hsplit on hsplit.row_date = ANDREWSTABLE.SegStart_Date and hsplit.split=ANDREWSTABLE.dispsplit and hsplit.starttime = ANDREWSTABLE.Interval 

回答

3

由于hsplit表没有任何主键,我相信它会产生重复的结果。虽然我不是管理员,但我无法设置主键。我曾问过,但我想要一个解决方法。

的问题是,你必须在CMS_ECH.dbo.hsplit表多行匹配要加入什么,基于连接标准(row_datesplitstarttime)。它不需要管理员 - 您需要查看CMS_ECH.dbo.hsplit表中的数据,并查看如何获得一对一匹配(假设可能)。

我推荐在考虑像GROUP BY或DISTINCT之类的解决方案之前查看一下...

1

使用GROUP BY声明

4

也许你可以SELECT DISTINCT...(只需在您选择后添加DISTINCT)即可获得帮助。我不知道你的应用程序是否足够,但你为什么不尝试。