Как удалить повторяющиеся результаты из моего SQL-запроса - PullRequest
0 голосов
/ 18 июля 2010

Большое спасибо за помощь!

Хорошо, часть моего запроса, которая дает повторяющиеся результаты, выглядит так:

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 - Как я могу удалить дублирующиеся строки?

Но,как мне применить это к моему запросу ниже:

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 ]

4 голосов
/ 18 июля 2010

Может быть, вам может помочь SELECT DISTINCT... (просто добавьте DISTINCT после вашего выбора).Я не знаю, достаточно ли это для вашего приложения, но почему бы вам не попробовать.

3 голосов
/ 18 июля 2010

Я считаю, что это приводит к дублированию результатов из-за того, что в таблице hsplit нет первичного ключа. Пока я не администратор, я не могу установить первичный ключ. Я спросил, но я хотел бы обойти.

Проблема в том, что у вас есть более одной строки в таблице CMS_ECH.dbo.hsplit, которая соответствует тому, к чему вы присоединяетесь, на основе критериев JOIN (row_date, split и starttime). Для этого не требуется администратор - вам нужно просмотреть данные из таблицы CMS_ECH.dbo.hsplit и посмотреть, как можно получить соответствие один к одному (при условии, что это возможно).

Я рекомендую взглянуть на это, прежде чем рассматривать бандитские решения, такие как GROUP BY или DISTINCT ...

1 голос
/ 18 июля 2010

Использование GROUP BY выписка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...